如何访问图像上 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;
我正在尝试访问 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;