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

how to access all pixels between 2 non linear points on an image

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

我尝试了以下方法:

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*()))

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

小例子(基于link):

// 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;