opencv入門2:使用opencv簡單畫圖

如opencv開發前的準備工作中所說,此系列文章是在學習Practical Python and OpenCV(點擊下載)這本書的一些記錄,發出來的文章跳過了第三章對RGB,以及numpy簡單操作等介紹,請大家下載原書查看,在原書中對一下段落已進行翻譯注釋。文章系列完整展示代碼點擊下載

線和矩形

畫線drawing.py

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)

運行結果如下:


畫圓drawing.py

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時填充整個圖像)

運行結果如下:

畫一個半徑,中心點隨機的填充多圓圖

畫圓drawing.py

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內容