机器视觉第六次实验
一、实验目的
通过OpenCV第六次进行实验,对图片进行宽度测量。
二、实验内容
对图片进行宽度测量。
三、实验过程
我使用的是python语言+openCV对图片进行宽度测量的功能。
1)读取图片
使用imread()函数读取图片,使用imshow()函数显示图片,waitKey()函数含义为按下任意键继续;
代码实例:
img = cv2.imread("img1.png")
cv2.imshow("img",img)
cv2.waitKey(0)
图3.1读取的图片
2)截取测量区域
实例代码:
#截取目标区域
recimg = img[80:236, 120:238]
cv2.imshow("img",recimg)
cv2.waitKey()
图3.2截取的测量区域
3)二值化处理
使用threshold()函数进行图片反色:
实例代码:
#二值化处理
ret, th = cv2.threshold(recimg, 80, 255, cv2.THRESH_BINARY_INV)
cv2.imshow("img",th)
cv2.waitKey()
图3.3二值化处理图
4)边缘检测、图像反色
输入的代码:
# 边缘检测、图片反色
img1 = cv2.Canny(recimg, 100, 200)
img1 = 255 - cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
img2 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
img2 = cv2.cvtColor(255 - th, cv2.COLOR_RGB2GRAY)
cv2.imshow("img",img2)
cv2.waitKey()
图3.4反色后得到的图片
5)边缘检测,框出物体的轮廓
实例代码:
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
x, y, w, h = cv2.boundingRect(cnt)
6)绘制直线
实例代码:
# 绘制直线
cv2.line(img1, (x, y), (x + w, y), (0,255,0), 3, 5)
cv2.line(img1, (x, y+h), (x + w, y+h), (0, 255, 0), 3, 5)
img[80:236, 120:238] = img1
7)图片上添加宽度大小
实例代码:
cv2.putText(img,''+str(w),(10,30),cv2.FONT_HERSHEY_COMPLEX,1,(0,0,255),1)
图3.5宽度测量图
四、实验中的错误
1)宽度测量的值需要写入图片,开始代码如下:
cv2.putText(img,''+str(w),(10,30),font,1,(0,0,255),1)一直报如下错:
图4.1写入文字报错
解决方案:将font 修改为以下代码:cv2.FONT_HERSHEY_COMPLEX
图4.2解决填入宽度问题
2)我们需要一步步实验在图片上的最佳位置填入文字和宽度。
五、实验总结
学习了OpenCV的宽度测量,遇到了作业问题自己解决了,锻炼了自己的能力。