用图像差分法进行图像缺陷检测的python 代码
时间: 2023-12-03 14:47:45 浏览: 75
以下是使用Python中的OpenCV库实现图像差分法进行图像缺陷检测的代码:
```python
import cv2
import numpy as np
# 读取原图和待检测图像
img1 = cv2.imread('original_image.png')
img2 = cv2.imread('defective_image.png')
# 将图像转换为灰度图像
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
# 计算两幅图像的差值
diff = cv2.absdiff(gray1, gray2)
# 对差值图像进行阈值处理
threshold = 30
diff[diff < threshold] = 0
diff[diff >= threshold] = 255
# 显示结果
cv2.imshow('Original Image', img1)
cv2.imshow('Defective Image', img2)
cv2.imshow('Difference Image', diff)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,我们首先读取原图和待检测图像,然后将它们转换为灰度图像。接下来,我们通过计算两幅灰度图像的差值来获取图像差分图像,并对差值图像进行阈值处理,以便将差异区域标记出来。最后,我们通过OpenCV库的imshow函数将结果图像显示出来。
相关问题
三帧差分法python灰度图像代码
以下是一个简单的三帧差分法的Python代码,用于处理灰度图像:
```python
import cv2
# 读入三帧图片
frame1 = cv2.imread('frame1.png', 0)
frame2 = cv2.imread('frame2.png', 0)
frame3 = cv2.imread('frame3.png', 0)
# 计算帧差
diff1 = cv2.absdiff(frame1, frame2)
diff2 = cv2.absdiff(frame2, frame3)
# 将两帧差相加
diff = cv2.bitwise_and(diff1, diff2)
# 二值化处理
thresh = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)[1]
# 显示结果
cv2.imshow('result', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这个代码中,我们使用OpenCV库来读入三帧图片,并计算它们之间的帧差。然后将两帧差相加,并使用二值化处理将结果转换为黑白图像。最后,我们显示结果。
用图像差分法进行图像缺陷检测,用给出的完整玻璃图像与文件夹中的待测图片集西,将缺陷图像输出到output文件夹的python 代码
以下是使用Python实现图像差分法进行图像缺陷检测的代码:
```
import cv2
import os
# 完整玻璃图像的路径
full_image_path = "full_image.jpg"
# 待测图片集所在的文件夹路径
test_images_path = "test_images/"
# 缺陷图像输出的文件夹路径
output_path = "output/"
# 读取完整玻璃图像
full_image = cv2.imread(full_image_path)
# 遍历待测图片集
for filename in os.listdir(test_images_path):
if filename.endswith(".jpg"):
# 读取待测图片
test_image = cv2.imread(os.path.join(test_images_path, filename))
# 计算差分图像
diff_image = cv2.absdiff(full_image, test_image)
# 将差分图像转换为灰度图像
gray_diff_image = cv2.cvtColor(diff_image, cv2.COLOR_BGR2GRAY)
# 进行二值化处理,将像素值大于阈值的设为255,其余设为0
_, binary_image = cv2.threshold(gray_diff_image, 30, 255, cv2.THRESH_BINARY)
# 判断二值化后的图像中是否存在白色像素点,如果存在则说明存在缺陷
if cv2.countNonZero(binary_image) > 0:
# 将缺陷图像输出到output文件夹中
cv2.imwrite(os.path.join(output_path, filename), binary_image)
```
注意事项:
- 图像路径需要根据实际情况进行修改。
- 代码中使用的阈值为30,需要根据实际情况进行调整。
- 代码中假设待测图片集中只包含jpg格式的图片,如果包含其他格式的图片需要进行相应的修改。