我必须处理矩阵,然后将其缩放为灰度图像。在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;
}
}
答案 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;
}