问题解决了......我用了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 ++。例如,如果下面的图像是源图像,
实际输出图像
答案 0 :(得分: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);
答案 1 :(得分:0)