OpenCV filter2D 内部非矩形 ROI
OpenCV filter2D inside non rectangular ROI
我有一个图像,其中只有一小部分非矩形部分是有用的。我有一个二进制掩码,指示有用的投资回报率。
如何将 OpenCV 中的cv::filter2D
仅应用于由二进制掩码定义的 ROI?
编辑
ROI 之外的像素值为 0。另一个的浮点值约为 300-500,因此 ROI 边界中的 filter2D 问题具有很高的值转换。
将ROI之外的像素值设置为ROI内最接近的像素也是可以接受的,类似于cv::BORDER_REPLICATE
可能是这样的。我认为边境口罩附近没有问题
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char* argv[])
{
Mat m = imread("f:/lib/opencv/samples/data/lena.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat mask=Mat::zeros(m.size(), CV_8UC1),maskBlur,mc;
// mask is a disk
circle(mask, Point(200, 200), 100, Scalar(255),-1);
Mat negMask;
// neg mask
bitwise_not(mask, negMask);
circle(mask, Point(200, 200), 100, Scalar(255), -1);
Mat md,mdBlur,mdint;
m.copyTo(md);
// All pixels outside mask set to 0
md.setTo(0, negMask);
imshow("mask image", md);
// Convert image to int
md.convertTo(mdint, CV_32S);
Size fxy(13, 13);
blur(mdint, mdBlur, fxy);
mdBlur.convertTo(mc, CV_8U);
imshow("Blur without mask", mc);
imwrite("blurwithoutmask.jpg",mc);
mask.convertTo(maskBlur, CV_32S);
// blur mask
blur(maskBlur, maskBlur, fxy);
Mat mskB;
mskB.setTo(1, negMask);
divide(mdBlur,maskBlur/255,mdBlur);
mdBlur.convertTo(mc, CV_8U);
imshow("Blur with mask", mc);
imwrite("blurwithmask.jpg",mc);
waitKey();
}
相关文章:
- OpenCV:无法从 contrib 存储库中找到模块(跟踪器,选择ROI)
- 将 openCv 中的曲线从 ROI 转换为帧
- OpenCV断言对RECT ROI失败了
- OpenCV 断言在 roi 中失败
- 为什么用cv::Mat(opencv)更改指向数据的指针与cv::filter2D有问题
- filter2D实现中的差异
- 如何使用 1D 高斯内核在 Filter2D 上创建自定义 2D 内核
- Opencv - filter2D() 方法实际上是如何工作的?
- 调整ROI是否会改变cv::Mat的整体大小
- 在OpenCV中使用遮罩和ROI计算轮廓内浮器的图像像素值(例如平均值)
- OpenCV filter2D 内部非矩形 ROI
- 在ROI中使用FindContours,将轮廓的坐标错误
- OpenCV Filter2D:仅滤波矩阵/图像的一部分
- OPENCV中的基于ROI的KLT光学跟踪器
- 当IMG(ROI)未返回正确的值时,如何正确提取ROI
- 获取存储在矩阵中的图像 ROI 的平均 R、G 和 B
- 使用MFC的opencv中函数cvInitImageHeader的输入roi错误
- 图像调整大小与生成行人检测ROI的图像金字塔-OpenCV
- 使用本地二进制模式进行对象跟踪:更改检测ROI的大小
- 检测停车场线路和ROI openCV