opencv學習(十八):影象梯度
阿新 • • 發佈:2018-12-08
程式程式碼:
#匯入cv模組 # -*- coding=utf-8 -*- import cv2 as cv import numpy as np #lapalian運算元 def lapalian_demo(image): # dst=cv.Laplacian(image,cv.CV_32F) # lpls=cv.convertScaleAbs(dst) kernel=np.array([[1,1,1],[1,-8,1],[1,1,1]]) dst=cv.filter2D(image,cv.CV_32F,kernel=kernel) lpls=cv.convertScaleAbs(dst) cv.imshow("lapalian_demo",lpls) #sobel運算元 def sobel_demo(image): grad_x=cv.Sobel(image,cv.CV_32F,1,0) grad_y=cv.Sobel(image,cv.CV_32F,0,1) gradx=cv.convertScaleAbs(grad_x) grady=cv.convertScaleAbs(grad_y) cv.imshow("gradient_x",gradx) cv.imshow("gradient_y",grady) gradxy=cv.addWeighted(gradx,0.5,grady,0.5,0) cv.imshow("gradient",gradxy) #影象梯度:scharr運算元:增強邊緣 def scharr_image(image): grad_x = cv.Scharr(image, cv.CV_32F, 1, 0)#x方向導數 grad_y = cv.Scharr(image, cv.CV_32F, 0, 1)#y方向導數 gradx = cv.convertScaleAbs(grad_x) grady = cv.convertScaleAbs(grad_y) cv.imshow("gradient_x", gradx)#顏色變化在水平分層 cv.imshow("gradient_y", grady)#顏色變化在垂直分層 gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0) cv.imshow("gradient", gradxy)#合成 print("------------Hi,Python!-------------") # 讀取影象,支援 bmp、jpg、png、tiff 等常用格式 src = cv.imread("F:/Projects/images/test1.png") #建立視窗並顯示影象 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) cv.imshow("input image",src) #顯示原圖 #sobel_demo(src) lapalian_demo(src) #scharr_image(src) cv.waitKey(0) #釋放視窗 cv.destroyAllWindows()
執行效果:
一、索貝爾運算元(sobel)
二、scharr運算元
三、拉普拉斯運算元