C++灰度图像处理
Gray scale images processing in C++
如何将C++中的图像读取为2D数组? 我需要创建一个 C/C++ 程序,该程序将图像(所有格式(读取为 2D 数组以显示像素值 (0-255(,将图像划分为块并使用像素块(BTC、AMBTC、MMBTC(应用不同的压缩方法,并在不使用已经设置的库的情况下手动保存新图像(不得使用 magic++(。 提前致谢
下面是一些使用 MFC 的CImage
类的"大纲"代码,可能会对您有所帮助。我已经展示了如何使用基本的Load
和Save
选项,以及如何获取像素数据的"原始"数组(注意:最好转换为 32 位格式,这样您就可以确定您获得的DWORD
指针实际上指向width X height
数组 - 其他 BPP 格式可能会给出奇怪的结果(:
首先,从文件加载(CImage
会从文件扩展名知道或猜测格式(:
CImage original;
original.Load("Yourfile.jpg"); // Use actual file path, obviously
int pw = original.GetWidth(), ph = original.GetHeight(); // Dimensions
CImage working; // Use this to hold our 32-bit image
working.Create(pw, ph, 32);
// Next, copy image from original to working...
HDC hDC = working.GetDC();
original.BitBlt(hDC, 0, 0, SRCCOPY);
working.ReleaseDC();
// Get a DWORD pointer to the pixel data...
BITMAP bmp;
GetObject(working.operator HBITMAP(), sizeof(BITMAP), &bmp);
DWORD* pixbuf = static_cast<DWORD*>(bmp.bmBits);
// We can now access any pixel(x,y) data using: pixbuf[x + y * pw]
您现在使用pixbuf
数组在图像缓冲区上执行各种工作,如注释中所述。为清楚起见:缓冲区中的每个DWORD
(32 位无符号(将是RGBA
数据(其中A
是"alpha"通道 - 设置为零(,但顺序相反;因此,对于每个DWORD,字节将为0xBBBBGGRRRRRR0000。
完成后,您可以按如下方式保存修改后的图像:
CImage savepic;
savepic.Create(pw, ph, 24); // Change 24 to whatever BPP you require
hDC = savepic.GetDC();
working.BitBlt(hDC, 0, 0, SRCCOPY); // Copies modified image to output
savepic.ReleaseDC();
savepic.Save("NewFile.jpg"); // CImage understand what format to use base on extension
当然,在实际程序中,您需要进行错误检查(大多数CImage
方法返回状态指示器,可以使用GetLastError()
(,并且您可能更安全地将"pixbuf"数据复制到单独的内存区域 - 但是,希望这个简短的概述将帮助您入门。
请随时要求进一步澄清和/或解释。
相关文章:
- OpenCV - 如何在灰度图像上应用 Kmeans?
- C++灰度图像处理
- 如何显示具有 opengl 纹理的灰度图像
- C++ Gdi+将图像转换为灰度
- 将 BMP 图像转换为灰度
- (C++)(Visual Studio) 将高斯模糊滤镜应用于 RGB 中的灰度图像
- 使用 SSE 以最快的速度缩小 8 位灰度图像
- 使用 OpenCV 和 C++将 16 位灰度图像更改为彩色图像
- 有没有办法使用 glDrawPixel 渲染单通道灰度图像?
- 如何在OpenCV中减去两个不同尺寸的图像和灰度图像
- 使用 ImageMagick 从像素强度数组创建灰度图像时遇到问题
- 如何将图像转换为灰度 opengl c++
- 将高斯模糊应用于灰度图像
- C++:灰度位图标题和实时绘画+opencv图像处理
- 在OpenCV中将灰度图像转换为单色
- Mat的convertTo函数在OpenCV中将灰度图像的类型转换为CV_32F时抱怨断言错误
- 使用 FreeImage 加载 RAW 灰度图像
- 处理灰度模板匹配中的亮度
- 在OpenCV 2中混合彩色图像和灰度图像
- c++和OpenCV:问题转换图像到灰度