如何访问图像上2个非线性点之间的所有像素

时间:2016-04-08 10:24:23

标签: c++ opencv line pixels

我试图访问2个非线性点之间的所有像素。但我不能这样做。 简单来说,使用cvLine函数我在两点之间绘制一条线,如下图所示(我想要访问2个红点之间沿绿线的像素)。

enter image description here

我尝试了以下内容:

Rect myROI(midPx, midPy, (edgPx-midPx), (midPy-edgPy)+1);    
Mat croppedImage = mask(myROI);   

在我的情况下不起作用。

任何人都可以帮我解决这个问题吗?

对不起,实际上我尝试了同样的例子,在评论时是错误的。我尝试了示例中的两种方法;

LineIterator it(mask, Point(midPx, midPy), Point(edgPx, edgPy), 8);
LineIterator it2 = it;
vector<Vec3b> buf(it.count);
//cout << buf<< endl;
for(int i = 0; i < it.count; i++, ++it)
{
    buf[i] = *(const Vec3b)*it;
}

// alternative way of iterating through the line
//for(int i = 0; i < it2.count; i++, ++it2)
 //{
   // cout <<it2.pos()<<","<<val<< endl;
    //buf.at<Vec3b>(Point(i,0)) = val;
//}
imshow("buf Image", buf);

但在buf [i]

处留下错误
erreur: no match for ‘operator*’ in ‘*cv::Vec<unsigned char, 3>(((const unsigned char*)it.cv::LineIterator::operator*()))

1 个答案:

答案 0 :(得分:1)

查看LineIterator,它用于获取一行的每个像素,并允许您处理它们:http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html#lineiterator

小例子(基于链接):

// grabs pixels along the line (pt1, pt2)
// from 8-bit 3-channel image to the buffer
LineIterator it(img, pt1, pt2);
vector<Vec3b> buf(it.count);

// iterate through the line
for(int i = 0; i < it.count; i++, ++it)
    buf[i] = *(const Vec3b)*it;