> 백엔드 개발 > C++ > OpenCV Mat 이미지에서 픽셀 채널 값에 효율적으로 액세스하는 방법은 무엇입니까?

OpenCV Mat 이미지에서 픽셀 채널 값에 효율적으로 액세스하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-23 08:46:10
원래의
341명이 탐색했습니다.

How to Efficiently Access Pixel Channel Values in OpenCV Mat Images?

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는 내부적으로 RGB가 아닌 BGR(파란색, 녹색, 빨간색) 형식으로 픽셀 데이터를 저장합니다.

위 내용은 OpenCV Mat 이미지에서 픽셀 채널 값에 효율적으로 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿