2014-12-15 5 views
-4

행렬을 처리 한 다음 회색조 이미지로 크기를 조정해야합니다. matlab에서 mat2gray 함수를 사용하여이 작업을 수행 할 수있었습니다. opencv에서 어떻게하면됩니까?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; 
    } 
} 
+1

이 매트의 입력 형식 것입니다 ? 'c5.at '는 이중 값을 가진 채널이 두 개 있다는 것을 의미합니다 (c5를 의미하는 경우). '그레이 스케일 이미지로 스케일링'이란 무엇을 의미합니까? 그레이 스케일 이미지는 하나의 채널입니다. 해당 채널에 부동 소수점 또는 이중 값이있는 경우 0에서 1 사이의 값으로 조정하여 검정색 (0)에서 흰색 (1)으로 표시해야합니다. 대신에 컬러 이미지를 그레이 스케일 이미지로 변환하려면 입력 형식이 무엇입니까? – Micka

+0

죄송 합니다만, 저는 openCV로 시작하고 있다고 말하지 않았습니다. 내 입력 행렬은 단일 채널 이미지이며 c5.at (i, j) = value; 잘못된 것일 수 있습니다. – madhurayavarapu

+0

질문에 대한 답변 "그레이 스케일 이미지로 크기를 조정합니까?" 평균. (int i = 0; i madhurayavarapu

답변

2
#include <opencv2/imgproc/imgproc.hpp> 

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

이것은 이미지가 BGR 형식 인 경우에만 작동합니다. 그가 'at '으로 접근 할 때 나는 그가 '그레이 스케일 이미지로 스케일링'하여 무엇을 의미하는지 확신 할 수 없다. – Micka

+0

@Micka 값은 double 또는 float이므로 이미지에는 3 개의 문자가있다 (따라서 3 개의 채널). 나는 그가 'at'방법을 이해하지 못하고 있다고 생각한다. – sop

+0

내 대답을 시도하고 그것을 사용하십시오 : cv :: Mat scaled = mat2gray (yourMat); 크기 조정 = 255 * 크기 조정; cv :: Mat mat; scaled.convertTo (변환 된, Cv_8UC1); – Micka

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; 
} 
+0

파이썬 코드가 있습니까? – semicolon