在图像处理中不可避免的要涉及到对图像像素的操作,这篇文章将介绍对图像像素的访问及遍历图像像素的方法。
1.颜色空间缩减及查找表
设想一种简单的C\C++类型的无符号字符型矩阵的存储结构,对于单通道图像而言,图像像素最多可以由256个像素值。如果图像是三通道图像,那么图像像素存储的颜色可以达到惊人的1600w。处理如此多的颜色类型对于算法的运算是一种沉重的负担。有时候我们可以找到一些既能够降低颜色数量但是并不会影响其处理结果的方法。通常我们缩减颜色空间。这就意味着我们用新输入的数值和更少的颜色来划分当前的颜色空间。
例如我们可以将值在0-9范围内的像素值看做0,将值位于10-19范围内的像素值看做10等等。当我们用int类型的数值代替uchar(unsigned char-值位于0-255之间)类型得到的结果仍为char类型。这些数值只是char类型的值,所以求出来的小数要向下取整。公式可以总结如下:
遍历整幅图像像素并应用上述公式就是一个简单的颜色空间缩减算法。对于较大的图像需要在执行操作可以前提前计算好其像素值存储到查找表中。查找变是一种简单的数组(可能是一维或多维),对于给定的输入变量给出最终的输出值。在进行图像处理时,像素取值范围在0-255之间其实就是一共有256种情况,所以将这些计算结果提前存储于查找表中,进行图像处理时,不需要重新计算像素值,可以直接从查找表调用。其优势在于只进行读取操作,不进行运算。
结合上述公和查找表如下:
int divideWith = 0;
stringstream s;
s << argv[2];
s >> divideWith;
if(!s || !divideWith)
{
cout << "输入的划分间隔无效." << endl;
return -1;
}
uchar table[<