【问题标题】:copying ipl image pixel by pixel逐像素复制ipl图像
【发布时间】:2012-11-22 08:38:34
【问题描述】:

问题解决了....我用的是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 ++。比如下图是源图,

真实输出图片

【问题讨论】:

  • 好吧,你可以按照你描述的那样做,我的意思是 IplImage 有一个指向数据的指针,你可以手动实现一些东西来复制 ROI。
  • 我不想设置 ROI 我想复制一些像素并将其显示在输出图像中。
  • 你可以使用cvGet2D
  • 感谢 Sgar..我也在考虑使用 cvGet2D..我会告诉你它是否有效......

标签: c++ c image-processing opencv


【解决方案1】:

编辑:

我可以看到 cmets 建议使用 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);

【讨论】:

  • 感谢您的回答。我不想做投资回报率,因为它需要正确。假设从源图像中我知道有关 20 个像素的信息(x,y 位置信息),我想以真实形状显示这些像素(可能是多边形但不是矩形)。但如果我使用 ROI,我将不得不显示一个矩形。
  • 好吧,我也向您展示了如何组装面具。 (请参阅“创建蒙版”)这取决于您在其中绘制的形状。 (如果你在面具中画一个白色的实心圆圈,你会看到圆圈......)
【解决方案2】:

您的问题的答案只需要查看 OpenCV 文档或在您喜欢的搜索引擎中搜索即可。

Here 您已经为 Ipl 图像和较新的 Mat 数据提供了答案。

为了获得我在您的图像中看到的输出,我会设置 ROI,这样会更有效率。

【讨论】:

  • 感谢您的意见..但我不想使用 ROI。假设我只知道 10 个像素的信息并且它们是圆形或其他形状..我想展示它们的真实形状.如果我使用 ROI,那么我必须显示为一个矩形。
  • 好吧,在我发布的答案中,您可以找到一个代码来复制每个像素的像素,这样您就可以做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
相关资源
最近更新 更多