질문: Mat에서 특정 픽셀의 채널 값을 어떻게 검색할 수 있습니까? 이미지?
답변:
픽셀 유형이 CV_8UC3(8비트 부호 없는 3채널 이미지)인 Mat 객체의 경우 다음 방법을 사용할 수 있습니다. :
for(int i = 0; i < foo.rows; i++) { for(int j = 0; j < foo.cols; j++) { Vec3b bgrPixel = foo.at<Vec3b>(i, j); // Process the BGR values... } }
이 코드에서 Vec3b는 8비트의 3채널 픽셀을 나타냅니다. 각 채널에 대한 부호 없는 정수. at은 지정된 행과 열의 픽셀 값에 액세스할 수 있는 멤버 함수입니다.
성능 최적화:
성능 향상을 위해 데이터 버퍼 액세스를 고려하세요. 직접:
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 the BGR values... } }
또는 행을 사용할 수도 있습니다. 방법:
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 the BGR values... } }
참고: OpenCV는 내부적으로 RGB가 아닌 BGR 형식으로 이미지를 저장합니다.
위 내용은 OpenCV의 매트 이미지에서 픽셀 채널 값을 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!