python实现卷积计算(采用opencv模块)

2025-05-09 22:42:45

1、卷积:简单说卷积是两个变量在某范围内相乘后求和的结果。输出 = 输入 * 系统任一个线性系统的输出都可以通过将输入信号与系统函数(系统的冲激响应)做卷积获得。总之很复杂的感觉,理论大家查信号处理的书。或者百度有大量文章介绍。感谢opencv把如此复杂的处理用一个cv.Filter2D(src, dst, kernel, anchor=(-1, -1)) 就搞定了。方便了我们自行计算卷积。我们的任务是自己构建卷积核。

2、图像处理:用一个模板和一幅图像进行卷积,对于图像上的一个点,让模板的原点和该点重合,然后模板上的点和图像上醑穿哩侬对应的点相乘,然后各点的积相加,就得到该点的卷积值。对图像上的每个点都这样处理。由于多数模板都对称,所以模板不旋转。import cv2 as cvimport numpy as npimport copyimport osfrom matplotlib import pyplot as pltfrom skimage.measure import compare_ssimimport randomimage = cv.imread('c:\\meiping1.png')gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)cv.imshow("gray",gray)rows,cols,channel = image.shapeimage2 = copy.copy(gray)

python实现卷积计算(采用opencv模块)

3、定义核kernel = np.ones((5,5),np.float32)/25result = cv.filter2D(image2,-1,kernel)plt.subplot(121),plt.imshow(gray),plt.title('gray')plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(result),plt.title('result')plt.xticks([]), plt.yticks([])plt.show()注意plt输出和imread 颜色次序不同所以有偏色 不影响演示。转换颜色方法以前文章有介绍。

python实现卷积计算(采用opencv模块)

4、kernel1 = np.array([[ -1,-1, 0], [ -1, 0, 1], [ 0, 1, 1]])result1= cv.filter2D(image2,-1,result1)plt.subplot(121),plt.imshow(gray),plt.title('gray')plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(result1),plt.title('result1')plt.xticks([]), plt.yticks([])plt.show()

python实现卷积计算(采用opencv模块)

5、kernel_usm = np.array([ [-1,-1,-1], [-1,9,-1], [-1,-1,-1]])kernel_usm_result= cv.filter2D(image2,-1,kernel_usm_result)plt.subplot(121),plt.imshow(gray),plt.title('gray')plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(kernel_usm_result),plt.title('kernel_usm_result')plt.xticks([]), plt.yticks([])#plt.show()

python实现卷积计算(采用opencv模块)

6、kernel2 = np.array([ [-1,-1,-1], [-1,8,-1], [-1,-1,-1]])result2 = cv.filter2D(image2,-1,kernel2)plt.subplot(121),plt.imshow(gray),plt.title('gray')plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(result2),plt.title('result2')plt.xticks([]), plt.yticks([])plt.show()

python实现卷积计算(采用opencv模块)

7、kernel3 = np.array([ [1,1,1], [1,-7,1], [1,1,1]])result3 = cv.filter2D(image2,-1,kernel3)plt.subplot(121),plt.imshow(gray),plt.title('gray')plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(result3),plt.title('result3')plt.xticks([]), plt.yticks([])plt.show()

python实现卷积计算(采用opencv模块)

8、kernel4 = np.array([ [-1,-1,-1,-1,-1], [-1,2,2,2,-1], [-1,2,8,2,-1], [-1,2,2,2,-1], [-1,-1,-1,-1,-1]])/8.0result4 = cv.filter2D(image2,-1,kernel4)plt.subplot(121),plt.imshow(gray),plt.title('gray')plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(result4),plt.title('result4')plt.xticks([]), plt.yticks([])plt.show()

python实现卷积计算(采用opencv模块)
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
相关推荐
  • 阅读量:86
  • 阅读量:88
  • 阅读量:68
  • 阅读量:55
  • 阅读量:80
  • 猜你喜欢