以下是python代码利用opencv进行图像处理的相关常用语句整理,该代码不能直接拷贝运行,只能供摘抄个别语句去实现你想要的功能实现。在理解的基础上去灵活应用这些语句。
#如果轮廓线是不闭合的 就使用长度来排序使用
def cnt_length(cnt):
"""length"""
length = cv2.arcLength(cnt,False)
return length
# 如果轮廓线是闭合的 就使用面积来排序使用
def cnt_area(cnt):
"面积"
area=cv2.contourArea(cnt)
return area
mask = np.zeros(img.shape, np.uint8) # 原图大小的纯黑mask图像
mask2=~mask1
mask[:]=255 #生成白色mask图像
gray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.namedWindow('src',cv2.WINDOW_AUTOSIZE)
himg = cv2.equalizeHist(gray) # 直方图均匀化
ret, binary = cv2.threshold(himg, 132, 255, cv2.THRESH_BINARY) # 阈值化
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 寻找轮廓线
contours.sort(key=cnt_length, reverse=True)//轮廓按照长度排序reverse=True升序排列,反之降序排列
contours.sort(key=cnt_area, reverse=True)//轮廓按照面积排序reverse=True升序排列,反之降序排列
cv2.drawContours(mask1, contours, -1, (255, 255, 255), cv2.FILLED)#画轮廓
for contour in contours: # 遍历所有轮廓
area = cv2.contourArea(contour) # 轮廓图面积
x, y, w, h = cv2.boundingRect(contour)
cv2.rectangle(mask1, (x, y), (x + w, y + h), (255, 0, 0), 2, cv2.LINE_AA)
cv2.putText(mask1, "No.%d" % (i + 1), (x, y - 5), font, 0.8, (255, 0, 0), 2)
if (area > 200): # 轮廓面积大于200的
#ellipse = cv2.fitEllipse(contour) #根据轮廓拟合椭圆
#cv2.ellipse(copyImg, ellipse, (B,G,R), 2, cv2.LINE_AA)
#x, y = ellipse[0]
circle=cv2.minEnclosingCircle(contour) #通过轮廓拟合最小外接圆
Cx,Cy=circle[0] #获得外接圆圆心点
r=circle[1] #获得外接圆半径
cv2.circle(mask, (np.int(Cx), np.int(Cy)) ,np.int(r-10) ,(255, 255, 255),
-1, 8,0)
ROI = cv2.bitwise_and(copyImg, mask) # 图形与mask 的 and 运算
//中间结果窗口展示
cv2.imshow('掩膜', mask1)
cv2.waitKey()
#如果图像太大,窗口无法显示全,则自定义窗口名和窗口大小来显示图像
cv2.namedWindow("resized",0);
cv2.resizeWindow("resized", 640, 480);
cv2.imshow("resized",iamge)
cv2.waitKey(0)
#设置窗口的位置
cv2.moveWindow("winname",x,y)
#销毁窗口
cv.destroyAllWindows()#销毁窗口
#读取图像和保存图像
image=cv.imread("image.jpg")
cv.imwrite(".\image.jpg",image)#将图片保存到本目录中