我想用OpenCV将一些Matlab代码转换成C ++代码。我需要使用哪些功能?
对于逐元素乘法,我不知道要使用哪个函数。 例如,
cv::Mat A; cv::Mat B; cv::Mat C;
C = A + B;
//or
cv::add(A, B, C);
这是MATLAB代码:
% G and b are constant
% Rb, CRb and Rb_final are the images
Rb = G(CRb+b);
min3 = min(min(Rb)); % minimum in the Rb image
max3 = max(max(Rb)); % maximum in the Rb image
Rb_final = uint8(255*(Rb-min3)/(max3-min3)); % This function is to scale the image into 0 ~ 255 using maximum and minimum value in the image. And then convert the image into 8-bit unsigned image.
这是我尝试过的OpenCV代码:
Rb_final = uint8(255*(Rb-min3)/(max3-min3));
我通过以下代码找到最大值和最小值:
double max3, min3;
minMaxLoc(Rb, &min3, &max3);
Rb = Rb - min3;
Rb = 255 * Rb;
Rb = Rb / (max3 - min3);
我发现所有B,G,R频道都这样。但是结果不如cv::convertScaleAbs(Rb, R, 255, 0);
答案 0 :(得分:0)
C ++代码的一个问题是图像的类型为uint8
,这意味着许多操作将溢出(或饱和)。例如,将图像乘以255可以保证图像溢出。相反,请对操作进行排序,以免溢出:
double max3, min3;
minMaxLoc(Rb, &min3, &max3);
Rb = Rb - min3;
Rb = Rb * (255 / (max3 - min3));
或者,使用cv::convertScaleAbs
:
cv::convertScaleAbs(Rb, Rb, 255 / (max3 - min3), -min3);
答案 1 :(得分:0)
只需这样做:
Ucode