在OpenCV中缩放矩阵

时间:2014-12-15 11:27:53

标签: opencv scaling

我必须处理矩阵,然后将其缩放为灰度图像。在matlab中我可以使用mat2gray函数实现这一点。我怎样才能在opencv中做同样的事情?

for(int i=0;i<c4.rows-1;i++)
{
    for(int j=0;j<c4.cols-1;j++)
    {

        value=100*sin(2*pi*j*18.0/imgCols);
        c5.at<Vec2d>(i,j)=value;
    }
}

2 个答案:

答案 0 :(得分:2)

#include <opencv2/imgproc/imgproc.hpp>

cv::Mat greyMat, colorMat;
cv::cvtColor(colorMat, greyMat, CV_BGR2GRAY);

答案 1 :(得分:0)

如果您已经有单个通道矩阵,并希望将它们的值在0和1之间(用于显示),请尝试以下方法:

cv::Mat mat2gray(cv::Mat inMat)
{
    //idea: to be scaled between 0 and 1, compute for each value: val := (val - minVal)/(maxVal-minVal)

    if(inMat.channels() != 1) std::cout << "mat2gray only works for single channel floating point matrices" << std::endl;

    // here we assume floating point matrices (single/double precision both ok)
    double minVal, maxVal;

    cv::minMaxLoc(inMat, &minVal, &maxVal);

    cv::Mat scaledMat = inMat.clone();
    scaledMat = scaledMat - cv::Mat(inMat.size(), inMat.type(), cv::Scalar(minVal));
    scaledMat = ((1.0)/(maxVal-minVal))*scaledMat;

    return scaledMat;
}