10

私は医用画像のセグメンテーションアルゴリズムに取り組んでおり、その過程で元の画像に進化する輪郭を表示する必要があります。
グレースケールJPEGを使用しています。輪郭を表示するためにdrawContours関数を使用しますが、カラー輪郭を描画することができません。グレースケール画像に赤い輪郭を描きたいのですが、黒か白しか見えません。
コードのセクションは次のとおりです。

Mat_<uchar> matrix = imread(path,0);
int row = matrix.rows;
int col = matrix.cols;
Mat_<uchar> maskInter(row,col);
for (int i=0; i<row; i++)
    for (int j=0; j<col; j++)
    {
        if ((double)matrix(i,j) <0)
        {maskInter(i,j)=255;}
        else
        {maskInter(i,j)=0;}
    };

vector<vector<Point> > contours; 
vector<Vec4i> hierarchy;
Mat mat_out = maskInter.clone();
findContours( mat_out, contours, hierarchy, CV_RETR_TREE , CHAIN_APPROX_SIMPLE);

drawContours( img, contours, -1, RGB(255,0,0),1.5,8,hierarchy,2,Point());
namedWindow(title);
moveWindow(title, 100, 100);
imshow(title, img);
waitKey(0);

グレースケール画像にカラーコンターを表示することはできますか?
ありがとう

4

2 に答える 2

16

色を描画して表示するには、3チャンネル(RGB)の画像が必要です。あなたMat_<uchar> matrixはたった1つのチャンネルです。次のように、グレースケール画像をカラー画像に変換できます。

  // read image
  cv::Mat img_gray = imread(path,0);

  // create 8bit color image. IMPORTANT: initialize image otherwise it will result in 32F
  cv::Mat img_rgb(img_gray.size(), CV_8UC3);

  // convert grayscale to color image
  cv::cvtColor(img_gray, img_rgb, CV_GRAY2RGB);
于 2012-11-18T21:25:34.490 に答える
-1

グレースケール画像にカラーコンターを表示することはできますか?

それが本当にグレースケール(ピクセルあたり1バイト)である場合、それはできません。カラーコンターを描画するには、このドローカラーコンターを使用して、その後に画像をRGB(ピクセルあたり3バイト)に変換する必要がありますcvtColor

于 2012-11-18T16:17:03.673 に答える