OpenCV 매트릭스의 픽셀 값에 액세스
OpenCV Mat 이미지에서 픽셀 값을 가져오는 방법은 데이터 구조에 따른 다양한 방법을 통해 수행할 수 있습니다. 픽셀을 나타내는 데 사용됩니다.
CV_8UC3 유형의 이미지를 가정합니다. 여기서 각 픽셀은 3개의 8비트 부호 없는 채널(BGR)로 표시되는 경우 특정 픽셀의 값을 검색하는 방법은 다음과 같습니다.
for (int i = 0; i < foo.rows; i++) { for (int j = 0; j < foo.cols; j++) { Vec3b bgrPixel = foo.at<Vec3b>(i, j); // Access and manipulate BGR values... } }
Vec3b는 3요소 벡터의 컨테이너이며, 여기서 각 요소는 B에 해당합니다. G, R 채널 값.
최적화 성능
성능을 향상하려면 데이터 버퍼에 직접 액세스할 수 있습니다.
uint8_t* pixelPtr = (uint8_t*)foo.data; int cn = foo.channels(); Scalar_<uint8_t> bgrPixel; for (int i = 0; i < foo.rows; i++) { for (int j = 0; j < foo.cols; j++) { bgrPixel.val[0] = pixelPtr[i * foo.cols * cn + j * cn + 0]; // B bgrPixel.val[1] = pixelPtr[i * foo.cols * cn + j * cn + 1]; // G bgrPixel.val[2] = pixelPtr[i * foo.cols * cn + j * cn + 2]; // R // Process BGR values... } }
또는 row() 메서드를 사용하여 개별 행에 액세스할 수 있습니다.
int cn = foo.channels(); Scalar_<uint8_t> bgrPixel; for (int i = 0; i < foo.rows; i++) { uint8_t* rowPtr = foo.row(i); for (int j = 0; j < foo.cols; j++) { bgrPixel.val[0] = rowPtr[j * cn + 0]; // B bgrPixel.val[1] = rowPtr[j * cn + 1]; // G bgrPixel.val[2] = rowPtr[j * cn + 2]; // R // Process BGR values... } }
위 내용은 OpenCV 매트릭스에서 픽셀 값에 효율적으로 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!