600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Opencv之图像滤波:1.图像卷积(cv2.filter2D)

Opencv之图像滤波:1.图像卷积(cv2.filter2D)

时间:2020-04-10 11:10:29

相关推荐

Opencv之图像滤波:1.图像卷积(cv2.filter2D)

写这些博客主要是记录自己学习Opencv的过程,也希望能帮助到大家。

在OpenCV中,允许用户自定义卷积核实现卷积操作,使用自定义卷积核实现卷积操作的函数是cv2.filter2D(),其语法格式为:

dst=cv2.filter2D(src,ddepth,kernel,anchor,delta,borderType)

式中:

● dst是返回值,表示进行方框滤波后得到的处理结果。

● src 是需要处理的图像,即原始图像。它能够有任意数量的通道,并能对各个通道独立处理。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F或者CV_64F中的一 种。

● ddepth是处理结果图像的图像深度,一般使用-1表示与原始图像使用相同的图像深度。

● kernel是卷积核,是一个单通道的数组。如果想在处理彩色图像时,让每个通道使用不同的核,则必须将彩色图像分解后使用不同的核完成操作。

● anchor 是锚点,其默认值是(-1,-1),表示当前计算均值的点位于核的中心点位 置。该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。

● delta 是修正值,它是可选项。如果该值存在,会在基础滤波的结果上加上该值作 为最终的滤波处理结果。

● borderType是边界样式,该值决定了以何种情况处理边界,通常使用默认值即可。

在一般情况下,使用cv.filter2D()时,对于参数锚点anchor,修正值delta,边界样式borderType,直接采用其默认值即可。

因此,cv.filter2D()的常用形式为:

dst=cv2.filter2D(src,ddepth,kernel)

例:

import cv2 as cvimport numpy as npdef cv_show(name, img):cv.imshow(name, img)cv.waitKey(0)cv.destroyAllWindows()# 卷积操作src = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]],dtype='float32')kernel1 = np.ones((3,3), dtype='float32')/9result = cv.filter2D(src, -1,kernel=kernel1)print('卷积前矩阵为:\n {}'.format(src))print('卷积后矩阵为:\n {}'.format(result))# 与图像做卷积操作img = cv.imread('D:\\dlam.jpg')if img is None:print('Failed to read the imagine')kernel2 = np.ones((7,7), dtype='float32')/49result2 = cv.filter2D(img, -1,kernel=kernel2)cv_show('哆啦A梦',img)cv_show('reslut', result2)

结果如下:

卷积前矩阵为:

[[ 1. 2. 3. 4. 5.]

[ 6. 7. 8. 9. 10.]

[11. 12. 13. 14. 15.]

[16. 17. 18. 19. 20.]

[21. 22. 23. 24. 25.]]

卷积后矩阵为:

[[ 5.5.3333335 6.3333335 7.333333 7.666667 ]

[ 6.666667 7.8.9.9.333333 ]

[11.666668 12. 13. 13.999999 14.333334 ]

[16.666666 17. 17.999998 19. 19.333332 ]

[18.333334 18.666666 19.666668 20.666668 21. ]]

可以明显的看出图像变模糊了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。