簡體   English   中英

使用LineIterator訪問沿線的像素強度值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM