机器视觉开发-边缘提取

发布于:2025-06-12 ⋅ 阅读:(20) ⋅ 点赞:(0)

        边缘提取一般包括多个步骤,首先需要对图像进行二值化处理,把需要提取边缘的对象反转为黑色,再提取边缘信息。

1.显示图片窗口

import cv2

# 读取本相对路径下的1.png文件
image = cv2.imread ("1.png")
# 将image对应图像在图像窗口显示出来
cv2.imshow('1',image)
# waitKey使窗口保持静态直到用户按下一个键
cv2.waitKey(0)

效果

 

2.获取二值灰度图

import cv2

# 读取本相对路径下的1.png文件
image = cv2.imread ("1.png")
# 对图像进行阈值分割,阈值设定为80,得到二值化灰度图
ret,image1 = cv2.threshold(image,80,255,cv2.THRESH_BINARY)
cv2.imshow('grayscale',image1)

# waitKey使窗口保持静态直到用户按下一个键
cv2.waitKey(0)

效果

 

3.对二值图进行反向

import cv2

# 读取本相对路径下的1.png文件
image = cv2.imread ("1.png")
# 对图像进行阈值分割,阈值设定为80,得到二值化灰度图
ret,image1 = cv2.threshold(image,80,255,cv2.THRESH_BINARY)
image2 = image1.copy()		# 复制图片
for i in range(0,image1.shape[0]):	#image.shape表示图像的尺寸和通道信息(高,宽,通道)
    for j in range(0,image1.shape[1]):
        image2[i,j]= 255 - image1[i,j]
    cv2.imshow('colorReverse',image2)


# waitKey使窗口保持静态直到用户按下一个键
cv2.waitKey(0)

效果 

4.边缘提取

import cv2

# 读取本相对路径下的1.png文件
image = cv2.imread ("1.png")
# 对图像进行阈值分割,阈值设定为80,得到二值化灰度图
ret,image1 = cv2.threshold(image,80,255,cv2.THRESH_BINARY)
image2 = image1.copy()		# 复制图片
for i in range(0,image1.shape[0]):	#image.shape表示图像的尺寸和通道信息(高,宽,通道)
    for j in range(0,image1.shape[1]):
        image2[i,j]= 255 - image1[i,j]

# 边缘提取
img = cv2.cvtColor(image2,cv2.COLOR_BGR2GRAY)
canny_img_one = cv2.Canny(img,300,150)
canny_img_two = canny_img_one.copy()	# 复制图片
for i in range(0,canny_img_one.shape[0]):	#image.shape表示图像的尺寸和通道信息(高,宽,通道)
	for j in range(0,canny_img_one.shape[1]):
		canny_img_two[i,j]= 255 - canny_img_one[i,j]
cv2.imshow('edge',canny_img_two)

# waitKey使窗口保持静态直到用户按下一个键
cv2.waitKey(0)

 效果