(求助)如何用CB来做图像处理。

xuzhu3000 2010-06-14 11:02:43
由于需要做视频传输,需要增强图像,传输已经做好了,用套接字,传灰度图像,每秒25侦。现在不知道如何增强图像。
虽然CANVAS的pixel可以访问每个像素,但是速度太慢,因为灰度图像时512*512,用for循环那得需要512*512次吧?
想用scanline,但是按照help的例子,显示一幅图像的时候只能显示一半。谁有好的思路望赐教。

为什么CB的资料这么少啊,虽然软件不错可是比起VC的资料来太少了,我是个初学者。
...全文
175 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzhu3000 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ccrun 的回复:]
无需多说,上代码解决问题.
C/C++ code
// 位图图像转灰度
void __fastcall CrnBitmap2GrayScale(Graphics::TBitmap *bmp)
{
BYTE btGray;
bmp->PixelFormat = pf24bit;
for(int y=0; y<bmp->Height; y++)
{
……
[/Quote]
我想知道怎么对灰度图像做处理,需要访问每个点,pixel说是比较慢,例子里scanline是比较快把,可是怎么做呢?邮代码吗?
感激!
ccrun.com 2010-06-16
  • 打赏
  • 举报
回复
你怎么知道没用到x呢?
x++不就用了吗.
yf2100 2010-06-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ccrun 的回复:]
无需多说,上代码解决问题.

C/C++ code
// 位图图像转灰度
void __fastcall CrnBitmap2GrayScale(Graphics::TBitmap *bmp)
{
BYTE btGray;
bmp->PixelFormat = pf24bit;
for(int y=0; y<bmp->Height; y++)
{
BYTE *pLine = (BYTE *)bmp->ScanLine[y];
for(int x=0; x<bmp->Width; x++)
{
// 平均值灰度
// btGray = (pLine[0] + pLine[1] + pLine[2]) / 3;
// 最大值
// btGray = Max(pLine[2], Max(pLine[0], pLine[1]));
// YUV值
btGray = 0.30 * pLine[0] + 0.59 * pLine[1] + 0.11 * pLine[2];

// 63 63 72 75 6E 2E 63 6F 6D
pLine[0] = btGray;
pLine[1] = btGray;
pLine[2] = btGray;
pLine += 3;
}
}
}

[/Quote]
for(int x=0; x<bmp->Width; x++)
{
里的代码为什么没用到x变量?
}
ccrun.com 2010-06-16
  • 打赏
  • 举报
回复
无需多说,上代码解决问题.
// 位图图像转灰度
void __fastcall CrnBitmap2GrayScale(Graphics::TBitmap *bmp)
{
BYTE btGray;
bmp->PixelFormat = pf24bit;
for(int y=0; y<bmp->Height; y++)
{
BYTE *pLine = (BYTE *)bmp->ScanLine[y];
for(int x=0; x<bmp->Width; x++)
{
// 平均值灰度
// btGray = (pLine[0] + pLine[1] + pLine[2]) / 3;
// 最大值
// btGray = Max(pLine[2], Max(pLine[0], pLine[1]));
// YUV值
btGray = 0.30 * pLine[0] + 0.59 * pLine[1] + 0.11 * pLine[2];

// 63 63 72 75 6E 2E 63 6F 6D
pLine[0] = btGray;
pLine[1] = btGray;
pLine[2] = btGray;
pLine += 3;
}
}
}
周药师 2010-06-15
  • 打赏
  • 举报
回复
CB自带的例子是如果把pBitmap显示出来,和把像素放到ptr里;

//注释掉那部分就不会有问题了
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
//This example shows drawing directly to the Bitmap
Byte *ptr;
try
{
pBitmap->LoadFromFile("C:\\bb.bmp");
/*
for (int y = 0; y < pBitmap->Height; y++)
{
ptr = (Byte *)pBitmap->ScanLine[y];

for (int x = 0; x < pBitmap->Width; x++)
ptr[x] = (Byte)y;
}
*/
Canvas->Draw(10,10,pBitmap);
}
catch (...)
{
ShowMessage("Could not load or alter bitmap");
}
delete pBitmap;

}
xuzhu3000 2010-06-14
  • 打赏
  • 举报
回复
就是在BCB的help里面,输入scanline可以看到的那个example。
我看过VC++有专门处理图像的书。
惭愧,我家里的电脑里练BCB6都没有,从网上找了几天也没找到。
谁能给个处理图像的思路,用DirectShow怎么处理,
最好是能用BCB自己处理,才有意思。
处理灰度图像得明白需要灰度直方图,不知道有做过的美
周药师 2010-06-14
  • 打赏
  • 举报
回复
既然是例子应该是没有问题,可能是你转过来的哪里没有注意吧
自己检查一下
或者贴出来看看

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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