cv2.filter2d()opencv中ddepth参数的解释?

时间:2017-04-13 12:56:28

标签: opencv

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('logo.png')

kernel = np.ones((5, 5), np.float32) / 25
dst = cv2.filter2D(img, -1, kernel)
plt.subplot(121), plt.imshow(img), plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(dst), plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()

我正在尝试平滑图片而我不理解cv2.filter2d()的ddepth参数,其中值为-1。那么-1做什么以及ddpeth是什么意思呢?

4 个答案:

答案 0 :(得分:3)

ddepth

ddepth表示目标图像的所需深度

它包含有关图像中存储的数据类型的信息,可以是unsigned char(CV_8U),signed char(CV_8S),unsigned short(CV_16U),等等...

对于类型,类型包含2个值组合的信息:

图片深度 + 频道数量

例如CV_8UC1(等于CV_8U),CV_8UC2CV_8UC3CV_8SC1(等于{{1}等等。

进一步阅读

有关更多讨论,请参阅以下两篇文章

答案 1 :(得分:1)

您可以在doc中看到ddepth代表&#34;目的地深度&#34; ,这是结果(目标)图片的深度。< / p>

如果使用-1,结果(目标)图像将与输入(源)图像具有相同的深度。

答案 2 :(得分:0)

基本上我知道有五种模糊图像的方法:

1)使用伽玛方法

2)创建您自己的内核(内核:它只是所需形状的一小撮数组),并将其应用于图像

3)使用OpenCv的内置函数

  

blur_img = cv2.blur(Image_src,Kernal_size)

4)高斯模糊

  

Guassian_blur_img = cv2.GuassianBlur(img_src,kernel_size,sigma_value)

5)中位数模糊

  

Median_blur_img = cv2.medianBlu(img_src,kernel_size_value)

我个人更喜欢使用中值模糊,因为它可以巧妙地消除图像中的噪点,这样仅图像的背景只会变得模糊,图像中的其他特征(例如角落)将保持不变。

答案 3 :(得分:0)

根据official doc

<块引用>

当 ddepth=-1 时,输出图像将与源图像具有相同的深度。

并且ddepth的有效值受下表限制:

ddepth table

例如:

cv::Mat src(3, 3, CV_8U3);
cv::Mat dst(3, 3, CV_16S3);
cv::Mat dst2(3, 3, CV_16F3);
cv::Mat kernel(3, 3, CV_8U, cv::Scalar(1));
cv::filter2D(src, dst, CV_16S, kernel); // valid
cv::filter2D(src, dst, CV_16F, kernel); // invalid