如opencv開發前的準備工作中所說,此系列文章是在學習Practical Python and OpenCV(點擊下載)這本書的一些記錄,發出來的文章跳過了第三章對RGB,以及numpy簡單操作等介紹,請大家下載原書查看,在原書中對一下段落已進行翻譯注釋。文章系列完整展示代碼點擊下載
importnumpyasnp
importcv2
canvas = np.zeros((300,300,3), dtype ="uint8")
#使用np.zeros方法構造一個300,300,3通道的RGB的numpy array
#zeros方法用初始值為零填充數組中的每個元素。
#dtype 數據類型? 8進制(
#Since we are representing our image as an RGB image with pixels in the range [0, 255],
#it’s important that we use an 8-bit unsigned integer, or uint8. There #are many
#other data types that we can use (common ones include 32-bit integers, and 32-bit
#or 64-bit floats), but we’ll mainly be using uint8 for the majority of the examples in this book)
green = (0,255,0)#定義一個表示綠色的BGR元組
cv2.line(canvas,(0,0),(300,300),green)
#line(canvas.point1,point2,color) 畫布,起點,終點,顏色
cv2.imshow("Canvas", canvas)
cv2.waitKey(0)
red = (0,0,255)
cv2.line(canvas,(300,0),(0,300),red,3)
#line(canvas.point1,point2,color,thickness) 畫布,起點,終點,顏色,線條寬度pixels
cv2.imshow("Canvas",canvas)
cv2.waitKey(0)
運行結果如下:
畫矩形drawing.py
cv2.rectangle(canvas,(10,10),(60,60),green)
#rectangle(canvas,point1,point2,color)畫布,起點,終點,顏色
we are starting our rectangle at point (10,10)
We decide to end our rectangle at(60,60),
defining a region of50x50pixels
cv2.imshow("Canvas",canvas)
cv2.waitKey(0)
cv2.rectangle(canvas,(50,200),(200,225),red,5)
#rectangle(canvas,point1,point2,color,thickness) 畫布,起點,終點,顏色,線條寬度pixels
cv2.imshow("Canvas",canvas)
cv2.waitKey(0)
以上我們只繪制了一個矩形的輪廓,如何繪制一個填充滿的矩形?
我們只需要通過設置厚度參數為:-1,如下
填充矩形drawing.py
blue = (255,0,0)
cv2.rectangle(canvas,(200,50),(255,125),blue,-1)
cv2.imshow("Canvas",canvas)
cv2.waitKey(0)
運行結果如下:
canvas = np.zeros((300,300,3),dtype ="uint8")
(centerX,centerY) = (canvas.shape[1] //2,canvas.shape[0] //2)
#圖像canvas的高度可以在canvas.shape [0]和canvas.shape [1]的寬度中找到。shape [2]為圖像channels
white = (255,255,255)
forrinrange(0,175,25):
# range(start, stop[, step])
# 參數說明:
# start: 計數從 start 開始。默認是從 0 開始。例如range(5)等價于range(0, 5);
# end: 計數到 end 結束,但不包括 end。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
# step:步長,默認為1。例如:range(0, 5) 等價于 range(0, 5, 1)
? ? cv2.circle(canvas,(centerX,centerY),r,white)
# cv2.circle(canvas,(centerX,centerY),radius,color,thickness) 畫布,起點,終點,顏色,線條寬度(為-1時填充整個圖像)
運行結果如下:
畫一個半徑,中心點隨機的填充多圓圖
for i in range(0,25):
???? radius = np.random.randint(5, high =200)
???? #使用np.random.randint 生成一個5到200之間的隨機數
???? color = np.random.randint(0, high =256,size=(3,)).tolist()
???? pt = np.random.randint(0, high=300, size = (2,))
???? cv2.circle(canvas,tuple(pt),radius,color,-1)
cv2.imshow("Canvas",canvas)
cv2.waitKey(0)
運行結果如下:
numpy.random.randint(low, high=None, size=None, dtype='l')
Return random integers from low (inclusive) to high (exclusive).
Return random integers from the “discrete uniform” distribution of the specified dtype in the “half-open” interval [low, high). If high is None (the default), then results are from [0, low).
Parameters:
low : intLowest (signed) integer to be drawn from the distribution (unless high=None, in which case this parameter is one above the highest such integer).
high : int, optionalIf provided, one above the largest (signed) integer to be drawn from the distribution (see above for behavior if high=None).
size : int or tuple of ints, optionalOutput shape. If the given shape is, e.g., (m, n, k), then m?n?k samples are drawn. Default is None, in which case a single value is returned.
dtype : dtype, optionalDesired dtype of the result. All dtypes are determined by their name, i.e., ‘int64’, ‘int’, etc, so byteorder is not available and a specific precision may have different C types depending on the platform. The default value is ‘np.int’.New in version 1.11.0.
Returns:
out : int or ndarray of intssize-shaped array of random integers from the appropriate distribution, or a single such random int if size not provided.
更多文章請關注我的博客:https://harveyyeung.github.io