2012-11-22 36 views
0

問題IPL圖像像素解決....我用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和是源和目的圖像相應的像素和[i]爲我想要在dst圖像中繪製的選定像素。我在下面列出了真實的圖像。

有一個源Ipl圖像,我想將圖像的一部分複製到一個新的目標圖像逐個像素。任何機構都可以告訴我該怎麼辦?我在opencv中使用c,C++。例如,如果下面的圖像是源圖像,enter image description here

實際輸出圖像enter image description here

+0

嗯,你可以這樣做就像你描述的那樣,我的意思是一個IplImage有一個指向數據的指針,你可以手動實現一些東西來複制ROI。 – SinisterMJ

+0

我不想設置ROI,我想複製一些像素並將其顯示在輸出圖像中。 – MMH

+1

你可以使用['cvGet2D'](http://docs.opencv.org/modules/core/doc/old_basic_structures.html?highlight=cvget2d#get-d) – sgarizvi

回答

0

回答你的問題,只要求有看OpenCV的文檔,或者只是在你喜歡的搜索引擎進行搜索。

Here您已經爲Ipl圖像和較新的Mat數據作出了答案。

對於我在圖片中看到的輸出,我會設置ROI,它會更高效。

+0

感謝您的意見..但我不想使用投資回報率。假設我知道只有10個像素的信息,他們是在圓形或其他形狀..我想展示他們的真實形狀。如果我使用投資回報率,那麼我必須顯示爲一個矩形。 – MMH

+0

好吧,在我發佈的答案中,您可以找到一個代碼來複制每個像素的像素,從而允許您這樣做。 – gui

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 

或者你可以複製矩形按矩形:

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

感謝您的回答。我不想做投資回報率,因爲它需要明智的。假設從源圖像我知道關於20像素(x,y位置信息)的信息我想顯示這些像素的真實形狀(可能是多邊形,但不是矩形)。但是如果我使用ROI,我將不得不顯示矩形。 – MMH

+0

好吧,我已經向您展示瞭如何組裝口罩。 (請參閱「創建一個面具」)這取決於您繪製的形狀。 (如果你在面具上畫一個白色的實心圓,你會看到圓圈......) –

+0

謝謝verymuch ... – MMH