宠物托运网站开发,汕头网站设计多少钱,设计师在线官网,网站外链多的危害对于图像#xff0c;我们经常需要知道关于图像的特殊属性#xff0c;比如宽度#xff0c;高度#xff0c;面积#xff0c;像素点数目等等#xff0c;那么在opencv-python中#xff0c;这些信息如何获取呢#xff1f;
本文结构#xff1a;
1.基本图像属性
2. 对于openc…对于图像我们经常需要知道关于图像的特殊属性比如宽度高度面积像素点数目等等那么在opencv-python中这些信息如何获取呢
本文结构
1.基本图像属性
2. 对于opencv中的特殊数据类型
3. 图像的矩
1. 图像的基本属性
图像的宽度、高度
首先opencv通过下面的方式获取图像内容
img cv2.imread(bgrImage.jpg, -1)#-1-以图像原格式0-灰度格式1-三通道格式 OpenCV使用的BGR三通道格式
opencv-python中使用cv2.imread()函数读取图像信息数据类型为numpy.ndarray不能通过img.cols, img.rows来获取(C版本cv::Mat的方式)通常会采用下面的方式获取图像的宽度高度通道数。
row, col, channel img.shape #返回一个tuple(row, col, channel)
图像的像素数目数据类型
pixels img.size
img_data_type img.dtype#uint8等
对像素点的索引
px img[10, 10]
print(px)# [ 84 188 155]
px img[10, 10, 0]
print(px) # 84
我们可以通过上面的方式实现对图像元素进行操作, 当你对处理速度有要求可以使用img.item(row, col, channel)来获取元素和使用img.itemset((row, col, channel), val)来修改元素。
2. 对于opencv中的特殊数据类型
这里主要参考着C版本的OpenCV库比如cv::Point, cv::Rect, cv::Scalar 此外还有一些如cv::Point3i, Vec4i等在某些函数使用到时对应即可。在opencv-python中使用numpy的数据格式进行处理并不存在Point Rect Scalar这些特殊的概念而是将其一般化了, 比如在绘制圆的时候
cv2.circle(img, (x, y), radius, color, thickness) #opencv的官方教程速度还真比不上百度
对于圆心直接使用一个tuple类型就行不再有cv::Point这样的特殊数据类型这样对于传参的时候灵活了不少。
对于矩形cv::Rect在python版本中绘制rectangle则无法使用传递(x, y, w, h)这样的格式只存有(x0, y0), (x1, y1)这样传递左上和右下点信息来完成
cv2.rectangle(img, (x0, y0), (x1, y1), color, line_width)
对于外接矩形直接通过x, y, w, h来获取矩形的信息
x, y, w, h cv2.boundingRect(contour)
对于cv::Scalar也直接使用tuple来表示了如
img_mean cv2.mean(img)# (127.549025, 127.6246, 127.67580000000001, 0.0)
返回一个长度为4的tuple这对应C的cv::Scalar.
3. 图像的矩
对于图像处理我们的目的是提取图像特征信息不论是选取ROI(感兴趣区域)还是滤波边缘提取等等而且我们希望提取的特征受到噪声几何形变光线的影响越少越好这样的特征存在么幸运的是还真发现了这样的特征--不变矩。
在OpenCV中关于矩的使用常用在下面几个地方
计算轮廓的质心
# 常伴随cv2.findContours()使用cv2.moments第一个参数为点集
img_moments cv2.moments(contour)
# 计算质心centroid坐标信息cent_x和cent_y
cent_x int(img_moments[m10]/img_moments[00])
cent_y int(img_moments[m01]/img_moments[00])
通过比较轮廓的矩来进行目标的匹配
对于opencv-python的基础数据类型有问题欢迎留言 Have Fun With OpenCV-Python, 下期见。