import cv2import numpy as np# 读取图像image = cv2.imread('工件图像.jpg')# 转换为灰度图像gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用二值化处理获取缺陷图像ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 使用形态学操作进行缺陷的去噪和填充kernel = np.ones((3,3), np.uint8)closing = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, kernel)# 获取缺陷轮廓contours, hierarchy = cv2.findContours(opening, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 遍历每一个缺陷,提取几何特征并绘制位置for i in range(len(contours)): # 获取面积和周长 area = cv2.contourArea(contours[i]) perimeter = cv2.arcLength(contours[i], True) # 获取质心 moments = cv2.moments(contours[i]) cx = int(moments['m10'] / moments['m00']) cy = int(moments['m01'] / moments['m00']) # 绘制位置和特征 cv2.drawContours(image, [contours[i]], -1, (0, 255, 0), 2) cv2.circle(image,(cx,cy), 5, (0,0,255), -1) cv2.putText(image, "Area: {:.2f}".format(area), (cx+10, cy-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 2) cv2.putText(image, "Perimeter: {:.2f}".format(perimeter), (cx+10, cy+10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 2)# 显示结果cv2.imshow('Defect Detection', image)cv2.waitKey(0)# 保存结果cv2.imwrite('Defect Detection.jpg', image)
时间: 2023-06-09 14:04:33 浏览: 77
这是Python中的两个库,cv2是OpenCV库,用于图像和视频处理,包括读取、写入、显示、处理、分析等。numpy是一个数学库,用于处理数字和数组。一般情况下,当我们读取图像时,使用cv2,而对图片进行处理时,使用numpy。
相关问题
请解释这段代码:import cv2 import numpy as np # 读取图片并转换为灰度图像 img = cv2.imread("terrain.png") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 预处理图像 blur = cv2.GaussianBlur(gray, (5, 5), 0) edges = cv2.Canny(blur, 100, 200) # 查找轮廓 contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(img, contours, -1, (0, 0, 255), 0.3) # 展示结果 cv2.imshow("Contours", img) cv2.waitKey(0) cv2.destroyAllWindows()
这是Python代码,在程序中引入了两个模块:cv2和numpy。
cv2是OpenCV库的Python接口,可以帮助我们进行计算机视觉的开发,如图像处理、目标检测等。numpy是Python中非常常用的科学计算库,它提供了高效的数组、矩阵、数值计算工具等,可以方便地进行数值计算和统计分析等操作。
通常情况下,我们在进行计算机视觉的开发时,会同时使用cv2和numpy这两个库,以达到更高的效率和更好的处理结果。
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('image.jpg',0) #读取灰度图像 # 横向投影 horizontal = np.sum(img, axis=1) plt.plot(horizontal, range(horizontal.shape[0])) plt.gca().invert_yaxis() plt.title('Horizontal Projection') plt.show() # 纵向投影 vertical = np.sum(img, axis=0) plt.plot(range(vertical.shape[0]), vertical) plt.title('Vertical Projection') plt.show()
这段代码实现了图像的横向投影和纵向投影,并使用Matplotlib库将结果显示出来。具体步骤如下:
1. 导入需要的库。
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
```
2. 读取图像并将其转换成灰度图像。
```python
img = cv2.imread('image.jpg',0) #读取灰度图像
```
3. 计算图像的横向投影并将结果显示出来。
```python
# 横向投影
horizontal = np.sum(img, axis=1)
plt.plot(horizontal, range(horizontal.shape[0]))
plt.gca().invert_yaxis()
plt.title('Horizontal Projection')
plt.show()
```
4. 计算图像的纵向投影并将结果显示出来。
```python
# 纵向投影
vertical = np.sum(img, axis=0)
plt.plot(range(vertical.shape[0]), vertical)
plt.title('Vertical Projection')
plt.show()
```
在这段代码中,`img`为输入的灰度图像,`horizontal`和`vertical`分别为横向和纵向投影的结果,使用`plot`函数和`invert_yaxis`函数可以将结果显示出来。需要注意的是,使用Matplotlib库需要安装相应的包,比如`matplotlib`和`numpy`。