我知道可以均衡图像的直方图,例如:
equalizeHist(image, image);
Run Code Online (Sandbox Code Playgroud)
如果我愿意,我可以定义一个ROI并在图像中仅对此ROI进行均衡:
Mat aux3 = image.clone();
equalizeHist(image(Rect(0,100, 200,200)), aux3(Rect(0,100, 200,200)));
Run Code Online (Sandbox Code Playgroud)
我现在想做的(并且我不知道是否可能)是使用点向量(cv :: vector轮廓)定义一个Roi(轮廓)并均衡该roi(这个roi并不总是会是一个矩形)
因此,这里的问题是:
使用openCV函数是否可以均衡不是矩形的图像部分?
我有这个代码来分配和初始化:
nw = new int*[V];
for (w = 0; w < V; w++) {
nw[w] = new int[K];
for (k = 0; k < K; k++)
nw[w][k] = 0;
}
Run Code Online (Sandbox Code Playgroud)
这是为了释放记忆:
if (nw) {
for (int w = 0; w < V; w++) {
if (nw[w])
delete nw[w];
}
Run Code Online (Sandbox Code Playgroud)
程序编译并运行,但是,当它尝试释放内存时,会失败.该程序并不总是以相同的w值失败.
有任何想法吗?
当我像这样应用中值滤波器时:
Mat medianFilter;
medianBlur(histEqu, medianFilter, 3);
Run Code Online (Sandbox Code Playgroud)
如果我应用中值滤波器,我期望得到相同的结果:
Mat manualMedianFiler;
float factor = 1 / 9.0;
Mat kernelMedian = (Mat_<float>(3, 3) <<
factor, factor, factor,
factor, factor, factor,
factor, factor, factor);
filter2D(histEqu, manualMedianFiler, CV_8U, kernelMedian, Point(-1,-1), 0, 4);
Run Code Online (Sandbox Code Playgroud)
所得矩阵相似,但不相等。难道我做错了什么?哪种是应用中值滤波器的正确方法?