從 OpenCV Mat 表示中擷取像素通道值
要取得 OpenCV Mat影像中特定像素的通道值,您可以使用有以下方法:
方法1:使用OpenCV的Vec3b
對於CV_8UC3 類型的Mat 影像,包含三個通道(藍、綠、紅),可以採用Vec3b資料結構:
for(int i = 0; i < foo.rows; i++) { for(int j = 0; j < foo.cols; j++) { Vec3b bgrPixel = foo.at<Vec3b>(i, j); // Access individual channel values: uint8_t blue = bgrPixel[0]; uint8_t green = bgrPixel[1]; uint8_t red = bgrPixel[2]; } }
方法2:直接緩衝區存取
為了提高效能,直接存取影像資料緩衝區可以利用:
uint8_t* pixelPtr = (uint8_t*)foo.data; int cn = foo.channels(); // Number of channels per pixel for(int i = 0; i < foo.rows; i++) { for(int j = 0; j < foo.cols; j++) { // Retrieve channel values: uint8_t blue = pixelPtr[i*foo.cols*cn + j*cn + 0]; uint8_t green = pixelPtr[i*foo.cols*cn + j*cn + 1]; uint8_t red = pixelPtr[i*foo.cols*cn + j*cn + 2]; } }
注意:OpenCV 內部以BGR(藍、綠、紅)格式儲存像素數據,而不是 RGB。
以上是如何有效率地存取 OpenCV Mat 影像中的像素通道值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!