opencv使用指针遍历图像中,颜色缩减函数里的问题

voidcolorreduce(Mat&img,intdiv=64){intnl=img.rows;intnc=img.cols*img.channels();for(i... void colorreduce(Mat& img, int div = 64)
{
int nl = img.rows;
int nc = img.cols * img.channels();
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;
}
}
}
代码最后一行为什么要加div/2,这有什么用啊?我怎么感觉两个输出一样啊
源图像输出:

加div/2

不加div / 2
展开
 我来答
365988768
2014-07-29 · TA获得超过1089个赞
知道小有建树答主
回答量:295
采纳率:75%
帮助的人:287万
展开全部

把那本书再往后面看一点,你应该就能看到这个解释了

yiyiyiyyyyyyy
推荐于2016-01-21 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:60
采纳率:100%
帮助的人:51.6万
展开全部
颜色空间压缩。
例如:
1,如果data[i] = 0 ;
data[i] = data[i] / div * div + div / 2 = 0 / 64 * 64 + 32 = 32
2,如果data[i] = 255 ;
data[i] = data[i] / div * div + div / 2 = 255 / 64 * 64 + 32 = 3*64 + 32 = 224

所以0-255 变为了 32-224,颜色被压缩了。

肉眼看不出差别不代表没有差别。你对程序进行调试,或者两幅图像做差,可以看出每个像素点颜色都是不一样的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式