簡體   English   中英

逐像素復制IPL圖像

[英]copying ipl image pixel by pixel

問題解決了。...我用的是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 ++。 例如,如果下面的圖像是源圖像, 在此處輸入圖片說明

實際輸出圖像 在此處輸入圖片說明

編輯:

我可以看到建議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);

您問題的答案僅需查看OpenCV文檔或僅在自己喜歡的搜索引擎中進行搜索即可。

在這里,您可以獲得Ipl圖像和較新的Mat數據的答案。

為了獲得在您的圖像中看到的輸出,我將通過設置ROI來實現,這樣效率更高。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM