注册 登录
编程论坛 C++ Builder

[求助]图像二值问题!

IsaacLee 发布于 2006-07-10 11:36, 2343 次点击
各位,你们好!我要从黑白的图像中读取它的像素值,当读到黑点的时候它的像素值是:0,但是当读到白点的时候它的像素值就是:16777215。请问这是怎么回事啊?读二值图像的话白的像素要么现实255的值,怎么可能是前面这个这么大的值的呢??请高手指教一下!!
17 回复
#2
lisypro2006-07-30 07:57

问我呀,我刚做了一个图像处理的毕业设计

#3
IsaacLee2006-07-31 20:20

那请问高手怎么读二值图像啊??我真的是有急用啊!!万分感谢了啊!!小弟这里请教了!!

#4
IsaacLee2006-08-01 11:58

高手怎么不来了呢??我在线等着啊!!

#5
baidu2006-08-01 15:00
贴上你的代码偶看看
#6
IsaacLee2006-08-02 09:25

void __fastcall TForm1::Button2Click(TObject *Sender)
{
lpSrc = new Graphics::TBitmap;
lpDst = new Graphics::TBitmap;

if(OpenPictureDialog1->Execute())
{
FileName = OpenPictureDialog1->FileName;

lpSrc->PixelFormat = pf1bit;
lpDst->PixelFormat = pf1bit;
lpSrc->LoadFromFile(FileName);
}
//Form1->Canvas->Draw(0,0,lpSrc);
Byte *p;
Byte r;
for(int x = 0; x < lpSrc->Height; x++)
{
p = (Byte*)(lpSrc->ScanLine[x]);
for(int y = 0; y < lpSrc->Width; y++)
{
r = p[y];
}
}


/*int value;
for(int x = 0; x < lpSrc->Height; x++)
{
for(int y = 0; y < lpSrc->Width; y++)
{
value = lpSrc->Canvas->Pixels[y][x];
}
}*/
}
我用上述两种方法,用跟踪调试显示出来的值不一样的啊!请问是为什么??图像我已经转换成了二值图像了。帮我看看,谢谢!

#7
IsaacLee2006-08-02 20:25

老大咋又不来了呢??我在线等候的啊!!你有能读二值图像的程序的话,能发到我的邮箱里吗?lionli2005@hotmail.com 万分感谢!!!!

#8
baidu2006-08-03 08:52

void __fastcall TForm1::Button2Click(TObject *Sender)
{
lpSrc = new Graphics::TBitmap;
lpDst = new Graphics::TBitmap;

if(OpenPictureDialog1->Execute())
{
FileName = OpenPictureDialog1->FileName;

// lpSrc->PixelFormat = pf1bit;
// lpDst->PixelFormat = pf1bit;
lpSrc->LoadFromFile(FileName);
Edit1->Text = lpSrc->PixelFormat;//看一下是多少

}
//Form1->Canvas->Draw(0,0,lpSrc);
Byte *p;
Byte r;
for(int x = 0; x < lpSrc->Height; x++)
{
p = (Byte*)(lpSrc->ScanLine[x]);
for(int y = 0; y < lpSrc->Width; y++)
{
r = p[y];
}
}


/*int value;
for(int x = 0; x < lpSrc->Height; x++)
{
for(int y = 0; y < lpSrc->Width; y++)
{
value = lpSrc->Canvas->Pixels[y][x];
}
}*/
}

lpSrc->PixelFormat = pf1bit;

我现在没环境,没法调试,估计是这里的错。

这样查看一下Edit1->Text = lpSrc->PixelFormat;

pf1bit的值应该是2吧?


#9
IsaacLee2006-08-03 09:35

baidu,谢谢你给我的回复,我按照你的建议看了一下。我发现Edit1里面的值是根据文件来的,我看了一下有这样的结果:二值图像(单色图),显示的是:1; 24位位图显示:6; 16色位图现实的是:2; 256色位图显示的是:3。为什么会是这样呢?请指点下。

#10
baidu2006-08-03 10:15



lpSrc->PixelFormat = 1;

再试试

回头晚上我调试调试看看是什么原因

#11
baidu2006-08-03 10:16
[QUOTE]二值图像(单色图),显示的是:1;[/QUOTE]这个不是绝对的,有可能是6,5,4,3,...
#12
IsaacLee2006-08-03 20:57

那高手是什么原因呢?读二值图像还是有上述的原因啊!!读出来的像素值还是不对的啊!!你有QQ吗??我们QQ上聊可以吗??

#13
baidu2006-08-03 21:01

不好意思,偶还现在还没回家,另外,偶不是高手
lpSrc->Canvas->Pixels[y][x];
==》
lpSrc->Canvas->Pixels[x][y];
是不是有问题?

#14
IsaacLee2006-08-05 12:38
不是啊!!这个x,y互换的话,那是行列的问题啊,只是读的顺序不同而已啊!对于像素值没有什么关系吧!!
#15
baidu2006-08-06 12:01
抱歉,我调试了也不知所以然,我得查查资料去

#16
baidu2006-08-06 12:05
我现在突然想到
r = p[y];返回的是一个字节


value = lpSrc->Canvas->Pixels[y][x];
返回的是三个字节吧?

强制 Byte value 试试
#17
IsaacLee2006-08-06 14:17
没事,查到了能告诉我吗??谢谢你了!!
#18
IsaacLee2006-08-06 14:18
我都试过了都是没用的,读出来的像素值都不对!!
1