2017-11-04 20 views
0

単純な読み込みとPNG画像の表示を行っています。背景が透明なPNG画像を読んでいます。私は画像をグレースケールで変換して表示しています。透明レイヤーでPNGを読み込んで表示する際の問題opencv

オリジナル画像

enter image description here

グレースケール画像:ここで

enter image description here

がコードされているが、変換後の画像は、このような何かを探しています。私は間違って何をしていますか?:

Mat image = imread("3X3_a11.png",IMREAD_GRAYSCALE); 
Mat output(image.size(),image.type()); 
// connectedComponents(image, output); 
imshow("Output", image); 
waitKey(0); 
destroyAllWindows(); 

答えて

2

あなたのRGBA画像は形式が正しくないか、少なくとも非常に奇妙です。負荷に私は警告を参照してください。

libpng warning: iCCP: known incorrect sRGB profile 

あなたはしかし、のような単純な処理でcv::connectedComponents用のバイナリバージョンの必要性を得ることができます。

#include <opencv2\opencv.hpp> 

int main() 
{ 
    cv::Mat4b img4b = cv::imread("path_to_image", cv::IMREAD_UNCHANGED); 

    // Convert to grayscale getting rid of alpha channel 
    cv::Mat1b img(img4b.rows, img4b.cols, uchar(0)); 
    for (int r = 0; r < img4b.rows; ++r) { 
     for (int c = 0; c < img4b.cols; ++c) { 
      if (img4b(r, c) == cv::Vec4b(255,255,255,255)) { 
       img(r, c) = uchar(255); 
      } 
      if (img4b(r, c)[3] == 0) { 
       img(r, c) = uchar(255); 
      } 
     } 
    } 

    cv::imshow("img", img); 
    cv::waitKey(); 
} 

結果:

enter image description here

+0

だから、素晴らしいです。チャームのように働いた:)ありがとうございます。この問題のあなたの素晴らしい答えを待っています: https://stackoverflow.com/questions/47108493/how-to-extract-different-shapes-from-an-image – XoXo

+0

私は 'connectedComponents'で' img'を直接使うことができます入力画像?私はそれを使ってみました。私は29ラベルを出力しました。 @Miki – XoXo

関連する問題