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

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

Linda Hamilton
Linda Hamilton원래의
2024-11-23 08:46:10342검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.