书名:计算机视觉40例从入门到深度学习:OpenCV-Python
作者:李立宗
出版社:电子工业出版社
出版时间:2022-07-01
ISBN:9787121436857
一、zip函数
- 有时,在循环中需要同时遍历多个不同的迭代对象,如同时遍历两个不同的元组。对于这种情况,可以使用zip函数将多个迭代对象组合,然后实现遍历。
a=("汪淼","罗辑","程心","章北海","常伟思")
b=("Python","OpenCV","计算机视觉","机器学习","深度学习")
for n,i,j in zip(range(len(a)),a,b):
print(n,i,j)
运行结果
二、预处理
-
实践中的图像往往是比较复杂的,如果想分离出前景和背景,需要进行大量的预处理工作。
-
预处理在图像处理过程中发挥着非常关键的作用,常用的预处理包括色彩空间转换、形态学处理(腐蚀、膨胀等)、滤波处理、阈值处理等。
- 色彩空间转换:
会选择在特定色彩空间内进行图像处理。最常用的转换是将彩色图像转换为灰度图像。 - 阈值处理:
将彩色图像或灰度图像处理为二值图像。 - 形态学处理:
形态学处理的基本操作是腐蚀、膨胀。腐蚀操作不仅能去除噪声,还能将连接在一起的不同图像分离。膨胀操作在一定程度上能够使腐蚀后的图像恢复为原始形状、原始大小。 - 滤波处理:
滤波处理主要是为了去除图像内的噪声,如细小的斑点等。
- 色彩空间转换:
-
在预处理的基础上,可以进行计数,并将计数结果显示在原始图像上,相应流程图如图所示。
三、程序
检测到共29个import cv2
img = cv2.imread('d:\\cells.jpg')
cv2.imshow("cells",img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 色彩空间转换:彩色图像一灰度图像
ishow=img.copy()
ret, binary = cv2.threshold(gray,0,100,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) # 阙值处理
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3)) #核
erosion=cv2.erode(binary,kernel,iterations=3) # 腐蚀操作
dilation=cv2.dilate(erosion,kernel,iterations=3) # 膨胀操作
gaussian = cv2.GaussianBlur(erosion,(3,3),0) # 高斯滤波
# ================查找所有轮廓======================
contours,hirearchy=cv2.findContours(gaussian,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
contoursOK=[]
for i in contours:
if cv2.contourArea(i)>30:
contoursOK.append(i)
draw=cv2.drawContours(img,contoursOK,-1,(0,255,0),2)
for i,j in zip(contoursOK,range(len(contoursOK))):
M = cv2.moments(i)
cX=int(M["m10"]/M["m00"])
cY=int(M["m01"]/M["m00"])
cv2.putText(draw, str(j), (cX,cY),cv2.FONT_HERSHEY_PLAIN,1.5,(0,0,255),2) # 在质心描绘数字
# ============显示图片====================
cv2.imshow("draw",draw)
print(len(contoursOK))
cv2.waitKey()
cv2.destroyAllWindows()
网友评论