我在msdn里找到一个SimpleImage的例子,里面是用的是CImage类,提供了一个B&W的例子,使用的是GetPixel和SetPixelRGB,但是转换速度实在太慢。有没有什么方法改进?
请问有没有关于数字图像处理的例子?关于图像像素级的操作,例如图像增强,边缘检测等,如果有完整的例子最好,我看过几本书,都是零散的,因为是初学VC,总觉得不清楚,谢谢。
请问有没有关于数字图像处理的例子?关于图像像素级的操作,例如图像增强,边缘检测等,如果有完整的例子最好,我看过几本书,都是零散的,因为是初学VC,总觉得不清楚,谢谢。
解决方案 »
- 结构体赋值的问题。大神们帮忙看看啊
- 关于_ConnectionPtr的使用
- 五千年来我大中华领土五千年来我大中华领土的变迁,以史签今!
- 分太多了,整天提心吊胆,生怕csdn上面的强盗给抢了,特来散分,以图晚上睡个安稳觉!!
- MFC做的activeX控件,在WEB上用,退出时,刷新时老是出现错误
- 请问,用sdk或 ansic,有好方法把整形传成字符串么??
- 辛辛苦苦下在下来的电子书不会看,咋办?
- SDK的问题:如何给一个控件(control)赋予identifier ?
- comm串口通信 ,偶尔接收数据会出错,求大神们解决!
- 如何做标准的windows HELP文件?
- 关于格式化内存
- fatal error C1010是什么错误?
例如可以使用 CreateDIBSection 得到一图像内存数据的地址,对这个内存数据进行操作或者使用GetDIBits 和 SetDIBits, 都可以加快图像处理
int maxY = imgOriginal.GetHeight(), maxX = imgOriginal.GetWidth();
byte r,g,b,avg;
byte *pBuffer;
int off = imgOriginal.GetBPP() >> 3;
for (int y=0; y<maxY; y++)
{
pBuffer = (byte*)imgOriginal.GetPixelAddress(0,y);
for (int x=0; x<maxX; x++)
{
r = *pBuffer;
g = *(pBuffer + 1);
b = *(pBuffer + 2);
avg = ((r + g + b)/3);
*pBuffer = *(pBuffer + 1) = *(pBuffer + 2) = avg;
pBuffer += off;
}
}
// 获取图像像素的高度和宽度
int height = m_imgCurrent.GetHeight(), width = m_imgCurrent.GetWidth();
// 获取图像的首地址
byte* pBase = (byte*)m_imgCurrent.GetBits();
// 获取每一行的宽度
int offset = m_imgCurrent.GetPitch();
int r, g, b, avg;
PixelData* pixel = NULL;
for (int x = 0; x < height; x++)
{
pixel = (PixelData*)(pBase + x * offset);
for (int y = 0; y < width; y++)
{
b = (int)pixel->blue;
g = (int)pixel->green;
r = (int)pixel->red;
avg = (int)((.587 * r + .299 * g + .114 * b) / 3);
pixel->blue = pixel->green = pixel->red = avg;
pixel++;
}
}
其中PixelData是一个struct {byte blue; byte green; byte red;}