题目:将图像的值由
25
6
3
256^3
2563压缩至
4
3
4^3
43,即将RGB的值只取
{
32
,
96
,
160
,
224
}
\{ 32,96,160,224\}
{32,96,160,224}。这被称作色彩量化。
采用国际标准测试图像Lena。
色彩的值按照下面的方式定义:
v
a
l
=
{
32
(
0
≤
v
a
r
<
64
)
96
(
61
≤
v
a
r
<
128
)
160
(
128
≤
v
a
r
<
192
)
224
(
192
≤
v
a
r
<
256
)
val = \begin{cases} 32 &(0\le var <64) \\ 96 &(61\le var<128) \\ 160 & (128\le var <192) \\ 224 &(192\le var<256) \end{cases}
val=⎩
⎨
⎧3296160224(0≤var<64)(61≤var<128)(128≤var<192)(192≤var<256)
C++代码:
cv::Mat src = cv::imread("LenaRGB.bmp");
cv::Mat dst(src.size(), CV_8UC3);
for (int row = 0; row < dst.rows; row++)
{
cv::Vec3b *currentSrcData = src.ptr<cv::Vec3b>(row);
cv::Vec3b *currentDstData = dst.ptr<cv::Vec3b>(row);
for (int col = 0; col < dst.cols; col++)
{
for (int c = 0; c < 3; c++)
{
(*(currentDstData + col))[c] = uchar((double((*(currentSrcData + col))[c]) / 64) * 64 + 32);
}
}
}
结果展示:
参考博客:https://github.com/gzr2017/ImageProcessing100Wen/blob/master/Question_01_10/README.md