从 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中文网其他相关文章!