python opencv——边缘检测算子
原始图片:
对图片进行的操作:
1. 原始图片反色
2. 原始图片通过SOBEL进行边缘检测,然后反色
3. 原始图片通过ROBERT进行边缘检测,然后反色
代码:
import matplotlib.pyplot as plt import cv2 import numpy as np img = cv2.imread('02.bmp', 0) dst = cv2.bitwise_not(img) cv2.imshow("reserve", dst)#反色 x = cv2.Sobel(dst, cv2.CV_16S, 1, 0) y = cv2.Sobel(dst, cv2.CV_16S, 0, 1) Scale_absX = cv2.convertScaleAbs(x) # convert 转换 scale 缩放 Scale_absY = cv2.convertScaleAbs(y) result = cv2.addWeighted(Scale_absX, 0.5, Scale_absY, 0.5, 0) kernelx = np.array([[-1,0],[0,1]], dtype=int) kernely = np.array([[0,-1],[1,0]], dtype=int) x_ = cv2.filter2D(dst, cv2.CV_16S, kernelx) y_ = cv2.filter2D(dst, cv2.CV_16S, kernely) #转uint8 absX = cv2.convertScaleAbs(x_) absY = cv2.convertScaleAbs(y_) Roberts = cv2.addWeighted(absX,0.5,absY,0.5,0) v3=cv2.bitwise_not(result) v4=cv2.bitwise_not(Roberts) titles = ['dip_switch_02','src', 'Sobel', 'Roberts'] imgs = [img, dst, v3, v4] cv2.imshow('img', img) cv2.imshow("reserve", dst)#反色 v3=cv2.bitwise_not(result) cv2.imshow("v3", v3)#反色 v4=cv2.bitwise_not(Roberts) cv2.imshow("v4", v4)#反色 # cv2.waitKey(0) cv2.destroyAllWindows()
运行结果:
最好不要合并结果,合并会使底色出现问题,一个一个输出会好一些。
1. 原始图片反色
2. 原始图片通过SOBEL进行边缘检测,然后反色
3. 原始图片通过ROBERT进行边缘检测,然后反色