【发布时间】:2013-11-04 01:40:58
【问题描述】:
对 C++ 相当陌生,我一直在使用 OpenCV 库。我正在尝试为图像查看器创建调光功能。这是void dim(int val)的主体。
我循环遍历每个像素,获取对 Vec3b 中像素的 RGB 值的引用,然后将它们减少一些变化因子,根据 val / 255 计算(其中 0 <= val <= 255。但由于某种原因,@987654324 @等都被设置为0,这意味着对于val的任何值,图像都会变黑。
可能在这里用浮点做一些有点愚蠢的事情,或者误解了 OpenCV 的某些方面;但我看不到它是什么。
for(int x = 0; x < rows; x++) {
for(int y = 0; y < cols; y++) {
Vec3b &pix = dst.at<Vec3b>(x,y);
float change = val / 255.0f;
pix[0] = (uchar)(pix[0] * change);
pix[1] = (uchar)(pix[1] * change);
pix[2] = (uchar)(pix[2] * change);
}
}
提前致谢!
【问题讨论】:
-
我测试了你的代码,它工作正常!不要将
val设置得太小,否则dst的结果会变成全黑。 -
你可以做
dst *= val/255.0f。此外,看起来您的索引错误。你应该有x < cols和y < rows。 -
为这个速记的提示干杯。我不明白索引是如何出错的,当前配置工作正常,如果我切换变量,它只会使图像的一部分变暗。
标签: c++ opencv image-processing