我遇到了一個問題,我需要訪問 opencv Mat 影像容器的像素。我使用 opencv inRange 函式來創建掩碼。在那個掩碼中,我需要檢查不同像素的值,但我不會收到我期望收到的值。
// convert image to hsv for better color-detection
cv::Mat img_hsv, maskR, maskY, mask1, mask2;
cv::cvtColor(image, img_hsv, cv::COLOR_BGR2HSV);
// Gen lower mask (0-5) and upper mask (175-180) of RED
cv::inRange(img_hsv, cv::Scalar(0, 50, 20), cv::Scalar(5, 255, 255), mask1);
cv::inRange(img_hsv, cv::Scalar(175, 50, 20), cv::Scalar(180, 255, 255), mask2);
// Merge the masks
cv::bitwise_or(mask1, mask2, maskR);
之后,我嘗試讀取獲得極高值甚至 nans 的像素值,但其中大多數為零,這是預期的,因為掩碼只有黑白
if (maskR.at<double>(position.x, position.y) == 255)
有什么我想念的嗎?我嘗試使用 double、uchar、int 和 float
當我列印掩碼時,我可以清楚地看到 0 和 255 條目(沒有 nans 或奇怪的數字),但是當我使用 at() 函式訪問它們時,我不會得到相同的結果。
像素的坐標應在 Mat 的范圍內,因為掩碼的尺寸為 1080x1920,并且沒有坐標超出該范圍。
我通過使用 cv::size 得到了尺寸
uj5u.com熱心網友回復:
我終于找到了我自己問題的答案。它在我使用 uchar 時有效:
maskR.at<uchar>(position.x, position.y) == 255
我認為這行不通,因為用 std::cout 列印它不會給我輸出,但原因是我忘記投射 uchar 所以它可以在控制臺中列印
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/421575.html
標籤:
