C++/CImg结果不一致
C++/CImg inconsistent results
下面,我有一个使用CImg库的简单程序(http://cimg.sourceforge.net/)其迭代图像的像素并且基于其灰度值(亮或暗)为每个像素输出0或1。奇怪的是,每次运行程序(使用相同的输入)时,我都会得到不同的结果。
如果我做
image.display()
它按预期工作,所以看起来CImg正在正确读取图像。然而,如果我尝试在内部for循环中打印AvgVal,每次都会得到不同的值。我使用的是OSX 10.7.3和gcc 4.2.1,如果这有什么不同的话。
#include <iostream>
#include <fstream>
#include <stdexcept>
#include "CImg-1.4.9/CImg.h"
using namespace cimg_library;
int main(int argc, char *argv[]) {
if (argc != 3) {
std::cout << "Usage: acepp inputfile outputfile" << std::endl;
}
else {
std::ofstream outputFile(argv[2]);
if (!outputFile.is_open()) throw std::runtime_error("error: cannot open file for writing");
CImg<unsigned char> image(argv[1]);
int RVal, GVal, BVal, AvgVal, outBit;
for (int iHeight = 0; iHeight < image.height(); iHeight++) {
for (int iWidth = 0; iWidth < image.width(); iWidth++) {
RVal = image(iWidth,iHeight,0,0);
GVal = image(iWidth,iHeight,0,1);
BVal = image(iWidth,iHeight,0,2);
AvgVal = (RVal + GVal + BVal) / 3;
outBit = 1;
if (AvgVal > 127) outBit = 0; // low is dark, high is light
outputFile << outBit;
}
outputFile << std::endl;
}
outputFile.close();
std::cout << "Done writing to: " << argv[2] << std::endl;
}
return 0;
}
我已经阅读SO一段时间了,但我刚刚注册,所以我不能发布我正在使用的示例图像。我只会描述它们——它们是使用Photoshop CS5创作的包含黑白图案的10px x 10px png图像。
如果您的输入.png文件是灰度文件(只有一个通道,因为.png格式允许),那么您的Gval和Bval可能被分配了从无效内存访问中获取的随机值。因此,您的AvgVal可能是错误的,并且每次运行程序时生成的图像可能不同。
相关文章:
- 如何查找导致结果不一致的代码
- 结果与 fstream::read 不一致
- 使用迭代器对向量的C 递归初始化产生不一致的结果
- boost::d ynamic_bitset 与 std::vector 的结果不一致<bool>?
- 使用不同的表达式计算同一整数时的结果不一致
- RapidJSON 在转换为字符串时产生不一致的结果
- 使用两种不同的方法遍历 Vector 的结果不一致
- GDI打印API StartDoc函数给出的结果不一致
- 位掩码结果不一致
- is_assignable<>结果不一致
- opencvmatchTemplate在计算机之间给出不一致的结果
- CPPCheck返回不一致的结果
- 异步函数产生不一致的结果
- 使用 strptime/strftime 的结果不一致
- 双精度数组和结果与 WIN32 和 WIN64 上的C++不一致
- 在opencv中findChessboardCorners()的结果不一致
- CUDA 共享内存 - 结果不一致
- C++/CImg结果不一致
- 从文件中读取的浮点值与计算结果不一致
- std::regex_search与gcc 4.9.1的结果不一致