实际操作的opencv版本: 4.4.0.42
安装指令(记得换安装源,这样安装的快些):
pip opencv-python==4.4.0.42 / conda opencv-python==4.4.0.42
1.cv2.findContours
简介:cv2.findContours()函数是用来检测物体轮廓的函数
定义:def findContours(image, mode, method, contours=None, hierarchy=None, offset=None)
image - 要检测的图片,注意:该函数输入的图片为二值图,即黑白的(不是灰度图)
mode - 轮廓的检索模式:(仅写出常用mode)
①:cv2.RETR_EXTERNAL - 只检测外轮廓
②:cv2.RETR_CCOMP - 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息
method - 轮廓的近似办法:(仅写出常用method)
①:cv2.CHAIN_APPROX_NONE - 存储所有的轮廓点,相邻的两个点的像素位置差不超过1
②:cv2.CHAIN_APPROX_SIMPLE - 压缩水平方向、垂直方向、对角线方向的元素,只保留该方向的终点坐标
使用:
# 以二值图形式读取图片
img = cv2.imread(‘test.jpg’, 0)
# 寻找可能的轮廓线
contours, hierarchy = cv2.findContours(img, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE)
2.cv2.fitEllipse
简介:cv2.fitEllipse()函数是用来拟合椭圆的函数
定义:def fitEllipse(points)
points - 轮廓线点列
使用:
# 以二值图形式读取图片
img = cv2.imread(‘test.jpg’, 0)
# 寻找可能的轮廓线
contours, hierarchy = cv2.findContours(img, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE)
for contour in contours:
# 过滤过短的轮廓线,因为拟合一个椭圆最少要5个点
if contour.size < 6:
continue
# 拟合椭圆,输入筛选出的轮廓线点列,输出((x坐标,y坐标),(长轴,短轴),倾角)
# 注意,输出的是长轴和短轴,不是半长轴和半短轴,输出的角度为角度制格式,不是弧度制格式
centre_pref, axil_pref, theta_pref = cv2.fitEllipse(contour)
3.cv2.ellipse
简介:cv2.ellipse()函数是用来画椭圆的函数
定义:def ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None)
img - 要画的图像输入
center - 椭圆中心点
axes - 椭圆的半长轴和半短轴
angle - 倾斜角度(输入的角度为角度制格式,不是弧度制格式)
startAngle - 起始角度
endAngle - 结束角度
color - 椭圆线条颜色,服从BGR的规律
thickness=None - 椭圆线的粗细,-1为将整个椭圆进行填充
lineType=None - 椭圆边界的类型(可选参数)
shift=None - 中心坐标中的小数位数和轴的值(可选参数)
使用:
# 读取图片
img = cv2.imread(‘test.jpg’)
# 画椭圆,注意:cv2.ellipse()函数所输入的椭圆圆心坐标、半长短轴长度都需要是整形的,即整数
cv2.ellipse(img , (int(x), int(y)), (int(axil_x), int(axil_y)), theta, 0, 360, color=(0, 0, 255), thickness=1)
# 显示椭圆
cv2.imshow("contours", img )
# 显示等待
cv2.waitKey()
# 摧毁显示窗口,即此张图片显示结束
cv2.destroyAllWindows()
- 未完待续。。。