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是什么意思呢?
答案 0 :(得分:3)
ddepth
表示目标图像的所需深度
它包含有关图像中存储的数据类型的信息,可以是unsigned char(CV_8U
),signed char(CV_8S
),unsigned short(CV_16U
),等等...
对于类型,类型包含2个值组合的信息:
图片深度 + 频道数量。
例如CV_8UC1
(等于CV_8U
),CV_8UC2
,CV_8UC3
,CV_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的有效值受下表限制:
例如:
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