프로그래밍/작은 메모

OpenCV 픽셀 색상 변경( 어두운 색은 검정색으로, 밝은 색은 흰색으로)

satnurn 2025. 7. 1. 16:07
반응형

 # 환경

 - visual studio 2019, c++

 - OpenCV 4.x

 

 # 픽셀 색상 변경

 - 자주 사용하는 OpenCV 픽셀 색상 값 변경 

 - 단순 Grayscale이나 흑백 (이진화)이 아닌 어두운 회색 색상 계열은 검정색, 밝은 흰색 계열 색상은 흰색으로 변환함.

cv::Mat img;    //from camera or image
/*

    ~~~~~~~~~~

*/

for (int y = 0; y < 100; y++)
{
    for (int x = 0; x < 100; x++)
    {
        if (img.at<cv::Vec3b>(y, x)[0] < 60 && img.at<cv::Vec3b>(y, x)[1] < 60 && img.at<cv::Vec3b>(y, x)[2] < 60
            && abs(img.at<cv::Vec3b>(y, x)[0] - img.at<cv::Vec3b>(y, x)[1]) < 20
            && abs(img.at<cv::Vec3b>(y, x)[1] - img.at<cv::Vec3b>(y, x)[2]) < 20
            && abs(img.at<cv::Vec3b>(y, x)[2] - img.at<cv::Vec3b>(y, x)[0]) < 20)
        {
            img.at<cv::Vec3b>(y, x)[0] = 0;
            img.at<cv::Vec3b>(y, x)[1] = 0;
            img.at<cv::Vec3b>(y, x)[2] = 0;
        }
        if (img.at<cv::Vec3b>(y, x)[0] > 130 && img.at<cv::Vec3b>(y, x)[1] > 130 && img.at<cv::Vec3b>(y, x)[2] > 130
            && abs(img.at<cv::Vec3b>(y, x)[0] - img.at<cv::Vec3b>(y, x)[1]) < 20
            && abs(img.at<cv::Vec3b>(y, x)[1] - img.at<cv::Vec3b>(y, x)[2]) < 20
            && abs(img.at<cv::Vec3b>(y, x)[2] - img.at<cv::Vec3b>(y, x)[0]) < 20)
        {
            img.at<cv::Vec3b>(y, x)[0] = 255;
            img.at<cv::Vec3b>(y, x)[1] = 255;
            img.at<cv::Vec3b>(y, x)[2] = 255;
        }
    }
}

 

 # 요약

 - RGB의 색상이 동일하거나 비슷하면 흰색 - 회색 - 검정색 계열의 색상임.

 - 다른 RGB 색상은 그대로 유지하되, 흰색 - 회색 - 검정색 계열의 색상만 흑백으로 변경하고자 간단한 아이디어 메모.

 

 

 

반응형