[英]Use LineIterator to access pixel intensity values along a line
我是opencv的新手,所以我想為我的任務提供幫助。 我已經使用Swift建立了一個繪圖iOS應用程序。 用戶能夠畫線並返回端點(x,y)中像素位置的數組。 用戶在其上繪制的畫布的尺寸與用戶可以選擇的圖片的尺寸相同。 我希望LineIterator沿着由端點數組定義的線訪問圖像的像素強度值。 由於行是分段的,所以我認為每個分段都會有一個新的LineIterator。 然后,返回一個包含像素位置和相應強度值的數組,以便可以為這兩個值繪制圖表。 到目前為止,這就是我在OpenCVWrapper.mm中擁有的內容
+(NSMutableArray *) getPixelIntensity:(UIImage *)image withEndpoints:(NSMutableArray *) endpoints{
//Transform UIImage to cv::Mat cv::Mat imageMat; UIImageToMat(image, imageMat);
cv::LineIterator(image, endpoints[0], endpoints[1], 8, false); }
我不確定如何構造LineIterator對象並訪問像素強度值。 謝謝!
為了使用cv::LineIterator
,您可以執行以下操作:
假設8位3通道圖像
// grabs pixels along the line (pt1, pt2)
// from 8-bit 3-channel image to the buffer
LineIterator it(img, pt1, pt2, 8);
LineIterator it2 = it;
vector<Vec3b> buf(it.count);
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)
{
Vec3b val = img.at<Vec3b>(it2.pos());
CV_Assert(buf[i] == val);
}
vector<Vec3b> buff
包含pt1和pt2之間的點處的像素值,可用於繪制wrt pt1和pt2的圖形。
通過該鏈接,您可以看到leftToRight
標志的含義以及如何使用它將像素值從pt1映射到pt2,反之亦然。
如果圖像是Vec3b
以外的其他圖像,則可以使用其他類型,例如Vec3f
表示浮點值, uchar
用於單通道圖像,依此類推。
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.