0

問題は解決しました....私はcvGet2Dを使用しました、以下はサンプルコードです

        CvScalar s;
        s=cvGet2D(src_Image,pixel[i].x,pixel[i].y);         
        cvSet2D(dst_Image,pixel[i].x,pixel[i].y,s);

src_Iamge と dst_Image はソース イメージと宛先イメージに対応し、pixel[i] は dst イメージに描画したい選択したピクセルです。以下に実際の画像を含めました。

ソース IPL 画像があり、画像の一部を新しい宛先画像にピクセル単位でコピーしたいと考えています。どうすればそれができるのか教えてもらえますか?私はopencvでc、c ++を使用しています。たとえば、下の画像がソース画像の場合、 ここに画像の説明を入力

実際の出力イメージここに画像の説明を入力

4

2 に答える 2

1

編集:

cvGet2d を示唆するコメントが表示されます。「ポイント」だけを表示したい場合は、それらがどこにあるかがわかるように、小さな近所で表示するのが最善だと思います。そのために、マスク上に (x,y) を原点とする白い塗りつぶされた円を描くことができますcopyTo

using namespace cv;

Mat m(input_iplimage);
Mat mask=Mat::zeros(m.size(), CV_8UC1);

p1 = Point(x,y); 
r = 3;
circle(mask,p1,r, 1); // draws the circle around your point.
floodFill(mask, p1, 1); // fills the circle.

//p2, p3, ...

Mat output = Mat::zeros(m.size(),m.type()); // output starts with a black background.
m.copyTo(output, mask); // copies the selected parts of m to output     

古い投稿:

マスクを作成し、それらのピクセルをコピーします。

#include<opencv2/opencv.hpp>
using namespace cv;

Mat m(input_iplimage);
Mat mask=Mat::zeros(m.size(), CV_8UC1); // set mask 1 for every pixel you wanna copy.
Rect roi=Rect(x,y,width,height);  // create a rectangle
mask(roi) = 1;   // set it to 0.
roi = Rect(x2,y2,w2,h2);
mask(roi)=1;     // set the second rectangular area for copying...

Mat output = 100*Mat::ones(m.size(),m.type()); // output with a gray background.
m.copyTo(output, mask); // copy selected areas of m to output

または、Rect-by-Rect をコピーすることもできます。

Mat m(input_iplimage);
Mat output = 100*Mat::ones(m.size(),m.type()); // output with a gray background.

Rect roi=Rect(x,y,width,height);
Mat m_temp, out_temp;
m_temp=m(roi);
out_temp = output(roi);
m_temp.copyTo(out_temp);

roi=Rect(x2,y2,w2,h2);
Mat m_temp, out_temp;
m_temp=m(roi);
out_temp = output(roi);
m_temp.copyTo(out_temp);
于 2012-11-22T17:24:40.440 に答える
0

あなたの質問への答えは、OpenCVのドキュメントを見るか、お気に入りの検索エンジンで検索するだけです。

ここに、Ipl画像と新しいマットデータに対する答えがあります。

あなたの画像に見られるような出力を得るには、ROIを設定して行います。より効率的です。

于 2012-11-22T12:08:49.550 に答える