逐块模糊图像
Blurring an image tile-by-tile
我试图分割输入图像并逐块模糊它,但在对相邻块进行所有cv::blur
调用后,我得到了边界像素,这与同时将cv::blur
集中应用于整个图像时得到的像素不同。
Mat upper(im, Rect( 0,0, 10,10 ));
Mat lower(im, Rect( 0,11, 10,20 ))
blur( upper, upper, Size( 5, 5 ) );
blur( lower, lower, Size( 5, 5 ) );
看起来我使用的库版本(2.4.8)并没有达到我所期望的效果:
与早期版本的OpenCV不同,现在的过滤操作完全支持图像ROI的概念,即ROI之外但图像内部的像素可以用于过滤操作。
(摘自:请参阅FilterEngine::此处应用描述)
p.S.1:我试图提取cv::boxFilter
实现并更改srcRoi
参数值,但也有错误的结果。
Mat src = im.clone();
Mat dst = src; // Trying to perform the operation in-place
Size ksize( 5, 5 );
Point anchor(-1,-1);
Ptr<FilterEngine> f = createBoxFilter(
src.type(), dst.type(),
ksize, anchor, true, BORDER_DEFAULT
);
f->apply(
src, dst,
Rect(0,0,10,10),
Point(0,0), false
);
f->apply(
src, dst,
Rect(0,0,10,10),
Point(0,11), false
);
p.S.2:帮助着色源代码会很有帮助。
您看到的问题是因为您试图在适当的位置执行此操作。一旦模糊了图像的一部分,那么就使模糊图像任何相邻部分所需的源像素无效。解决方案是不在适当的位置执行此操作,以便原始源像素可用于要模糊的图像的任何部分。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 想要检测图像中的模糊,但无法正确
- 如何组合许多连续的图像来模拟逼真的运动模糊?
- (C++)(Visual Studio) 将高斯模糊滤镜应用于 RGB 中的灰度图像
- 使用纯 c++ 模糊图像
- 将高斯模糊应用于灰度图像
- 二项式模糊图像过滤器将内核应用于图像
- 使用高斯模糊进行图像卷积,可以加速
- 通过标准平均 c++ 模糊图像
- 这里有任何方法可以使用拉普拉斯运算符来确定图像是否模糊
- 具有积分图像的快速模糊图像(OpenCV)
- 逐块模糊图像
- 模糊保存图像检测对象使用OpenCV
- 图像只在某些部分模糊,而不是全部
- 卷积模糊图像产生一个粗略的输出图像
- Opencv2模糊图像