机器视觉 边缘检测算子
Posted 朱不住
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器视觉 边缘检测算子相关的知识,希望对你有一定的参考价值。
1.实验目的
利用opencv python实现对下图实现边缘检测算子。
2.实验过程
(1)在python安装opencv库, pip install opencv-python。
(2)在python安装Pillow库, pip install Pillow。同理,安装Numpy库。
(3)编写代码
代码如下:
import cv2
import numpy
import cv2 as cv
import numpy as np
from PIL import Image, ImageDraw, ImageFont
# coding=utf-8
# cv2解决绘制中文乱码
def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
if (isinstance(img, numpy.ndarray)): # 判断是否OpenCV图片类型
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
# 创建一个可以在给定图像上绘图的对象
draw = ImageDraw.Draw(img)
# 字体的格式
fontStyle = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8")
# 绘制文本
draw.text((left, top), text, textColor, font=fontStyle)
# 转换回OpenCV格式
return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)
#图像反色
def inverse_color(image):
height,width,temp = image.shape
img2 = image.copy()
for i in range(height):
for j in range(width):
img2[i,j]=(255-image[i,j][0],255-image[i,j][1],255-image[i,j][2])
return img2
#读取图像
src = cv2.imread("dip_switch_02.bmp")
#反色
one = inverse_color(src)
#加入文本信息
image1=cv2ImgAddText(one,"原图像",5, 5, (255, 0, 0), 20)
#显示图片
cv2.imshow("image1",image1)
#sobel算子边缘检测
sobelx = cv2.Sobel(one,cv2.CV_16S,1,0)
sobely = cv2.Sobel(one,cv2.CV_16S,0,1)
sobelx = cv2.convertScaleAbs(sobelx)
sobely = cv2.convertScaleAbs(sobely)
sobelXY = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
tow=inverse_color(sobelXY)
image2=cv2ImgAddText(tow,"sobel算子边缘检测结果",5, 5, (255, 0, 0), 20)
cv2.imshow("image2",image2)
#robert算子边缘检测
kernelx = np.array([[-1,0],[0,1]], dtype=int)
kernely = np.array([[0,-1],[1,0]], dtype=int)
x = cv2.filter2D(one, cv2.CV_16S, kernelx)
y = cv2.filter2D(one, cv2.CV_16S, kernely)
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Roberts = cv2.addWeighted(absX,0.5,absY,0.5,0)
three=inverse_color(Roberts)
image3=cv2ImgAddText(three,"robert算子边缘检测结果",5, 5, (255, 0, 0), 20)
cv2.imshow("image3",image3)
#gauss算子边缘检测
gray_lap=cv2.Laplacian(one,cv2.CV_16S,ksize=5)
gauss_img=cv2.convertScaleAbs(gray_lap)
dst3=cv2.bitwise_not(gauss_img)
image4=cv2ImgAddText(dst3,"gauss算子边缘检测结果",5, 5, (255, 0, 0), 20)
cv2.imshow("image4",image4)
cv2.waitKey(0)# 等待键盘输入,不输入则无限等待
cv2.destroyAllWindows()
3.运行结果
运行结果如下图所示。
图3.1 原图像
图3.2 sobel算子边缘检测结果
图3.3 robert算子边缘检测结果
图3.4 gauss算子边缘检测结果
以上是关于机器视觉 边缘检测算子的主要内容,如果未能解决你的问题,请参考以下文章