2016-12-10 9 views
2

私は画像処理と開発を初めて行った人です。私は画像のピクセル座標を持っています。それぞれの座標を接続することで、三角形を得ることができます。座標を与えるピクセル(三角形内のピクセル)内のピクセルを抽出します。与えられた座標内のピクセルを抽出する

座標は次のとおりです。

1(x,y) -> (146 , 548) 
2(x,y) -> (155, 548) 
3(x,y) -> (149.6 , 558.1) 

上記の座標のインバウンドピクセルを取得するにはどうすればよいですか。どんな助けもありがとうございます。ありがとうございました。

+1

まず、drawContoursメソッドを使用して3点の輪郭線を描画し、その画像をマスクとして使用してピクセルを抽出します。 – hariprasad

+0

@hariprasadあなたはもっと説明できますか? – Alan

答えて

4

あなたの画像にマスクを適用する必要があります。

例コード:

まず、あなたのイメージをロードする必要があります

//load default image 
Mat image = cv::imread("/home/fabio/code/lena.jpg", cv::IMREAD_GRAYSCALE); 

default image loaded

その後、あなたのイメージのためのマスクを作成して、マスクに三角形のポイントを適用します。あなたのマスクは次のようになりますことをした後

//mask image definition 
cv::Mat mask = cv::Mat::zeros(image.size(), image.type()); 

//triangle definition (example points) 
vector<Point> points; 
points.push_back(Point(100,70)); 
points.push_back(Point(60,150)); 
points.push_back(Point(190,120)); 

//apply triangle to mask 
fillConvexPoly(mask, points, Scalar(255)); 

:最後に

triangle mask image

元の画像にマスクを適用し、最終的なイメージを作成します。

//final image definition 
cv::Mat finalImage = cv::Mat::zeros(image.size(), image.type()); 

image.copyTo(finalImage, mask); 

結果:

result

これはあなたが探しているものですか?

+0

これは正しいです。ありがとうございました。どうすればバックグラウンドなしで三角形だけを取ることができますか? – Alan

1

スレッドはこれについて話していますが、そこに示されている解決策は、提供されている例で使用されている形状を置き換えるだけで簡単に適用できます。ここで

はリンクです:opencv-binary-image-mask-for-image-analysis-in-c

関連する問題