高手请进,麻烦看一下我的数据格式转换有没有问题

zw978007 2009-09-25 04:17:00
搞了两天了,二值化一个灰度图仍然不成功.实在找不出代码错在什么地方了,估计是形成思维定势了.
程序如下,BinaryImage函数对图象进行二值化处理,threhold是阈值,ImageArray保存灰度图数据,定义如下:
BYTE** ImageArray;
程序运行后binarydata文件中的内容全为0.搞了两天了,还是这样,急求高手帮忙看看是不是其中数据格式的转换有问题,谢谢了

void CBarRecog::BinaryImage()
{
int threhold=128;
ofstream bifile("binarydata",ios_base::out); //打开输出文件
//未装载图像时不进行任何操作
if(ImageArray == NULL) //装载图象后ImageArray即变成了一个二维矩阵,存储灰度图象的灰度信息
return;

int i, j;
bifile < <"判决阈值threhold为" < <int(threhold) < <'\n';
for(i=0; i <ImageHeight; i++)
{
for(j=0; j <ImageWidth; j++)
{
if(int(ImageArray[i][j]) >= threhold) //threhold为判决阈值
ImageArray[i][j] = 1;
else
ImageArray[i][j] =0; //1为黑,0为白
bifile.width(3);
bifile < <int(ImageArray[i][j]);

}
bifile < <'\n';
}
bifile.close();
}
...全文
144 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloudyi 2009-10-25
  • 打赏
  • 举报
回复
既然已经说了是二值化, 那么我估计就是数据类型的问题了:
1. 那个阈值threhold首先应该用BYTE型吧
2. bifile < <int(ImageArray[i][j]);写入的时候应该弄成BYTE型的, 不然这样会在二值化图像中占四个字节, 相当256位图的两个像素点了
3. 二值化时如果还是用256色表示位图, 那么亮就用255, 黑就用0:
if(int(ImageArray[i][j]) >= threhold) //threhold为判决阈值
ImageArray[i][j] = 255; //ImageArray必须为BYTE型
else
ImageArray[i][j] = 0; //1为黑,0为白
isoftstone1998 2009-10-23
  • 打赏
  • 举报
回复
对这个不是很懂啊,正好可以跟你们学习下。
fandh 2009-10-23
  • 打赏
  • 举报
回复
ImageArray是如何定义的?
jematrix 2009-10-23
  • 打赏
  • 举报
回复
代码上 看不出什么问题
设断点 跟踪 变量看下

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧