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: