C++ 减法表示图像c++;opencv
我想把图像的平均值减去这个图像。 我正在使用DFT,然后我想做一些处理,以使我的图像更清晰。 我使用了meanstdev函数,但是图像没有改变。我应该使用什么函数来代替 我的代码C++ 减法表示图像c++;opencv,c++,mean,opencv3.0,C++,Mean,Opencv3.0,我想把图像的平均值减去这个图像。 我正在使用DFT,然后我想做一些处理,以使我的图像更清晰。 我使用了meanstdev函数,但是图像没有改变。我应该使用什么函数来代替 我的代码 你的问题并不清楚问题可能在哪里,你能创建一个吗?谢谢你的回答,我添加了代码。代码正常工作,但图像的平均值与无平均值之间没有差异。只需将所有值相加并除以像素数,即可获得图像通道的平均值。你可能还有第三个通道,是吗?当我使用:std::cerr时,我猜你想说的是,magI只有一个通道。这一点很清楚,正如docu中所写的“计
你的问题并不清楚问题可能在哪里,你能创建一个吗?谢谢你的回答,我添加了代码。代码正常工作,但图像的平均值与无平均值之间没有差异。只需将所有值相加并除以像素数,即可获得图像通道的平均值。你可能还有第三个通道,是吗?当我使用:std::cerr时,我猜你想说的是,magI只有一个通道。这一点很清楚,正如docu中所写的“计算2D向量的大小”。它将第一个通道视为x坐标,第二个通道视为y坐标,然后计算这些2D向量的长度。
dft(complexI, complexI);
split(complexI, planes);
magnitude(planes[0], planes[1], planes[0]);
Mat magI = planes[0];
magI += Scalar::all(1);
log(magI, magI);
magI = magI(Rect(0, 0, magI.cols & -2, magI.rows & -2));
int cx = magI.cols / 2;
int cy = magI.rows / 2;
Mat q0(magI, Rect(0, 0, cx, cy));
Mat q1(magI, Rect(cx, 0, cx, cy));
Mat q2(magI, Rect(0, cy, cx, cy));
Mat q3(magI, Rect(cx, cy, cx, cy));
Mat tmp;
q0.copyTo(tmp);
q3.copyTo(q0);
tmp.copyTo(q3);
q1.copyTo(tmp);
q2.copyTo(q1);
tmp.copyTo(q2);
Mat mean;
Mat stddev;
meanStdDev(magI, mean, stddev);
Mat dst;
subtract( magI, mean, dst);
normalize(dst, dst, 0, 1, CV_MINMAX);
namedWindow("spectrum magnitude", WINDOW_AUTOSIZE);
imshow("spectrum magnitude", dst);