Opencv 图像减色

彩色图像由三通道像素组成,每个通道表示红、绿、蓝三原色中一种颜色的亮度值,每个数 值都是 8 位无符号字符类型,因此颜色总数为 256×256×256,即超过 1600 万种颜色。因此,为 了降低分析的复杂性,有时需要减少图像中颜色的数量。

void colorReduce(cv::Mat img, int div = 64)
{
    int nl = img.rows;    //  行数
    int nc = img.channels()*img.cols;    //  每行元素数量
    for(int j = 0; j<nl;j++)
    {
        uchar* data = img.ptr<uchar>(j);  //  获取地址
        for(int i = 0; i<nc;i++)
            data[i] = data[i]/div*div+div/2;    
// 一个像素三个字节,分别是BGR,利用 int 除法向下取整的特性,将像素值确定在{32,96,160,224}四个区间(256/4 = 64) } }

不同减色因子效果如下:

原图:

 

减色因子 32:

 

减色因子 64:

 

减色因子128:

 

posted @ 2022-03-01 20:19  补码  阅读(158)  评论(0编辑  收藏  举报