opencv python教程简书_OpenCV-Python系列二:常用的图像属性
對(duì)于圖像,我們經(jīng)常需要知道關(guān)于圖像的特殊屬性,比如寬度,高度,面積,像素點(diǎn)數(shù)目等等,那么在opencv-python中,這些信息如何獲取呢?
本文結(jié)構(gòu):
1.基本圖像屬性
2. 對(duì)于opencv中的特殊數(shù)據(jù)類型
3. 圖像的矩
1. 圖像的基本屬性
圖像的寬度、高度
首先,opencv通過下面的方式獲取圖像內(nèi)容
img = cv2.imread('bgrImage.jpg', -1)#-1-以圖像原格式,0-灰度格式,1-三通道格式, OpenCV使用的BGR三通道格式
opencv-python中使用cv2.imread()函數(shù)讀取圖像信息,數(shù)據(jù)類型為numpy.ndarray,不能通過img.cols, img.rows來獲取(C++版本cv::Mat的方式),通常會(huì)采用下面的方式獲取圖像的寬度,高度,通道數(shù)。
row, col, channel = img.shape #返回一個(gè)tuple(row, col, channel)
圖像的像素?cái)?shù)目,數(shù)據(jù)類型
pixels = img.size
img_data_type = img.dtype#uint8等
對(duì)像素點(diǎn)的索引
px = img[10, 10]
print(px)# [ 84 188 155]
px = img[10, 10, 0]
print(px) # 84
我們可以通過上面的方式實(shí)現(xiàn)對(duì)圖像元素進(jìn)行操作, 當(dāng)你對(duì)處理速度有要求,可以使用img.item(row, col, channel)來獲取元素和使用img.itemset((row, col, channel), val)來修改元素。
2. 對(duì)于opencv中的特殊數(shù)據(jù)類型
這里主要參考著C++版本的OpenCV庫,比如cv::Point, cv::Rect, cv::Scalar, 此外還有一些如cv::Point3i, Vec4i等,在某些函數(shù)使用到時(shí)對(duì)應(yīng)即可。在opencv-python中,使用numpy的數(shù)據(jù)格式進(jìn)行處理,并不存在Point, Rect, Scalar這些特殊的概念,而是將其一般化了, 比如在繪制圓的時(shí)候:
cv2.circle(img, (x, y), radius, color, thickness) #opencv的官方教程速度還真比不上百度
對(duì)于圓心,直接使用一個(gè)tuple類型就行,不再有cv::Point這樣的特殊數(shù)據(jù)類型,這樣對(duì)于傳參的時(shí)候靈活了不少。
對(duì)于矩形cv::Rect,在python版本中繪制rectangle則無法使用傳遞(x, y, w, h)這樣的格式,只存有(x0, y0), (x1, y1)這樣傳遞左上和右下點(diǎn)信息來完成
cv2.rectangle(img, (x0, y0), (x1, y1), color, line_width)
對(duì)于外接矩形,直接通過x, y, w, h來獲取矩形的信息
x, y, w, h = cv2.boundingRect(contour)
對(duì)于cv::Scalar,也直接使用tuple來表示了,如:
img_mean = cv2.mean(img)# (127.549025, 127.6246, 127.67580000000001, 0.0)
返回一個(gè)長(zhǎng)度為4的tuple,這對(duì)應(yīng)C++的cv::Scalar.
3. 圖像的矩
對(duì)于圖像處理,我們的目的是提取圖像特征信息,不論是選取ROI(感興趣區(qū)域),還是濾波,邊緣提取等等,而且我們希望提取的特征受到噪聲,幾何形變,光線的影響越少越好,這樣的特征存在么?幸運(yùn)的是,還真發(fā)現(xiàn)了這樣的特征--不變矩。
在OpenCV中,關(guān)于矩的使用常用在下面幾個(gè)地方:
計(jì)算輪廓的質(zhì)心
# 常伴隨cv2.findContours()使用,cv2.moments第一個(gè)參數(shù)為點(diǎn)集
img_moments = cv2.moments(contour)
# 計(jì)算質(zhì)心centroid坐標(biāo)信息cent_x和cent_y
cent_x = int(img_moments['m10']/img_moments['00'])
cent_y = int(img_moments['m01']/img_moments['00'])
通過比較輪廓的矩來進(jìn)行目標(biāo)的匹配
對(duì)于opencv-python的基礎(chǔ)數(shù)據(jù)類型,有問題歡迎留言, Have Fun With OpenCV-Python, 下期見。
總結(jié)
以上是生活随笔為你收集整理的opencv python教程简书_OpenCV-Python系列二:常用的图像属性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打印机服务器总是自动停止,win7系统p
- 下一篇: python opc plc_PYtho