import cv2
import numpy as np
def prewitt(pic,x1,y1):
x = cv2.filter2D(pic,cv2.CV_16S, x1)
y = cv2.filter2D(pic,cv2.CV_16S, y1)
# 转 uint8 ,图像融合
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Prewitt = cv2.addWeighted(absX,1,absY,1,0)
#print(type(x))
return Prewitt
def main():
img=cv2.imread('ccpp.jpg')
#蓝通道
b=img[:,:,0]
#红通道
r=img[:,:,2]
#绿通道
g=img[:,:,1]
#perwitt算子
kernelx = np.array([[1,1,1],[0,0,0],[-1,-1,-1]],dtype=int)
kernely = np.array([[-1,0,1],[-1,0,1],[-1,0,1]],dtype=int)
r=prewitt(r,kernelx,kernely)
g=prewitt(g,kernelx,kernely)
b=prewitt(b,kernelx,kernely)
#通道融合,取反
merged = cv2.merge([255-b,255-g,255-r])
cv2.imwrite("name.jpg",merged)
cv2.imshow('merged_img',merged)
if __name__ == '__main__':
main()
原图:
边缘图: