Tag: 图像

填充位图像素arrays

我正在制作一个在C中创建位图文件的程序,它使用的是24位颜色。 我正在分3个阶段编写文件,首先编写FileHeader,然后编写InfoHeader,然后编写像素数据。 我在填充像素数据时遇到问题,因此每行都在字边界上完成。 下面的代码有时会工作 ,但只有没有while循环(它将填充添加到行的末尾)。 例如,对于12×12像素的图像,我可以将其缩放到24×24,但不能缩放到10×10(文件已损坏)。 当我输入下面的填充代码时,图像会变形,有时也会损坏。 我似乎无法弄清楚出了什么问题,下面的代码应该在每行的末尾添加填充,直到我遇到一个单词边界,然后开始下一行。 fwrite(&fh, 1, sizeof(FILEHEADER), n_img); fwrite(&ih, 1, sizeof(INFOHEADER), n_img); int i, j; uint8_t pad = 0; for (i = height-1; i >= 0; i–) { for (j = 0; j < width; j++) fwrite(n_pix+(i*width)+j, 1, sizeof(IMAGE), n_img); while(ftell(n_img)%4 != 0) fwrite(&pad, 1, 1, n_img); }

什么是最简单的RGB图像格式?

我在C上进行物理实验, Young的干涉实验 ,我制作了一个程序,可以打印出一大堆像素: for (i=0; i < width*width; i++) { fwrite(hue(raster_matrix[i]), 1, 3, file); } 当hue给定值[0..255]时,返回一个带有3个字节的char * ,R,G,B。 我想在我的图像文件中放一个最小的标题,以使这个原始文件成为有效的图像文件。 更简洁:切换自: offset 0000 : height * width : data } my data, 24bit RGB pixels 至 offset 0000 : dword : magic \ : /* ?? */ \ 0012 : dword : height } Header common […]

如何在openCV中以全屏无边框窗口显示图像

我想在全屏无边框窗口中在OpenCV中显示图像。 换句话说,只显示图像像素,没有菜单,工具栏或窗口背景。 使用imshow()或cvShowImage()不启用它: 窗口的宽度增加到全屏但不是高度。 它错过了几个像素。 即使通过更改窗口处理程序的设置,我也无法使其无边界。 我认为问题根源于cvNamedWindow()方法,它创建了主WS_OVERLAPPED窗口,然后创建了一个子imshow() ,所有函数如imshow()或cvGetWindowHandle()在子cvGetWindowHandle()运行。 因此即使是windows命令: SetWindowLong((HWND)cvGetWindowHandle(winName), GWL_STYLE, WS_VISIBLE | WS_EX_TOPMOST | WS_POPUP); 没有帮助,因为孩子不能成为无边界的WS_POPUP 。 有人得到了解决方法吗? 也许,在没有使用opencv内置方法的情况下向窗口显示opencv mat 或某种窗口技巧 PS我尝试了以下代码: cvMoveWindow(“AAA”,0,0); cvSetWindowProperty(“AAA”, CV_WINDOW_FULLSCREEN, CV_WINDOW_FULLSCREEN); // Also I tried this: HWND hwnd = (HWND)cvGetWindowHandle(“AAA”); RECT windowRect; windowRect.left = 0; windowRect.top = 0; windowRect.right = cxScreen; //Display resolution windowRect.bottom = cyScreen; //Display resolution AdjustWindowRect(&windowRect,WS_VISIBLE,false); […]

如何在C / C ++中将12位图像转换为8位?

好吧,所以我一直非常沮丧地尝试将12位缓冲区转换为8位缓冲区。 图像源是12位GrayScale(从JPEG2000解压缩),其颜色范围为0-4095。 现在我必须将其减少到0-255。 常识告诉我,我应该像这样简单地划分每个像素值。 但是当我尝试这个时,图像太亮了。 void TwelveToEightBit( unsigned char * charArray, unsigned char * shortArray, const int num ) { short shortValue = 0; //Will contain the two bytes in the shortArray. double doubleValue = 0; //Will contain intermediary calculations. for( int i = 0, j =0; i < num; i++, j +=2 ) { […]

最快的C / C ++图像大小调整库

我正在编写一个需要调整大量图像的应用程序…这些是我的要求: C / C ++ 至少支持jpeg / png 快速 跨平台 到目前为止,我的选择是: OpenCV的 CIMG ImageMagick的 GraphicsMagick(据说速度很快) 魔鬼 来自Boost的GIL CxImage的 Imlib2(据说很快) 还有其他人? 所有这些都可以完成工作,但我在这里寻找最快 ,我无法找到他们的表现任何基准。

轻量级C ++图像库

我一直在寻找一个简单而小巧但又强大且快速( 不全面!)的C ++图像库(如果没有C ++版本,C就足够了)。 我正在寻找的主要function是: 免费(开源是一个加号) 专为速度而设计 没有巨大的function膨胀(像ImageMagik ,这是真正全面但是是猛犸象) 微小的内存占用 仅支持绝对最小的function,如加载/保存,resize,格式之间的转换。 没有什么花哨 “损坏”文件的错误恢复(与stb_image.c不同,后者的错误恢复非常差) MSVC和gcc友好(我使用CxImage多年,但最新版本我遇到了MSVC 2010的问题,看起来它的积极开发和支持已经消失了,所以我即将放弃它) 应该支持流行的现代格式,如JPEG2000,直接或通过使用像libpng这样的通用库 不关心它是DirectX还是OpenGL,因为我不打算用它来显示图像 – 只是为网站进行文件处理 支持静态和动态链接是一个优点 线程支持是一个巨大的优势 由于某种原因,我查看和解雇的图书馆: CxImage(不再有活跃的开发) ImageMagik – 太大(而且很慢) stb_image.c – error handling错误,不支持足够的图像格式 DevIL(还没有被解雇,但也没有看过很多 – 只是在几分钟之前在SO上的类似post中了解到它) – 基于它的大小和function设置它看起来非常有希望我需要的东西 FreeImage(和DevIL一样 – 很快就会看一下它,但它的尺寸有点大我的口味) SOIL(与stb_image.c相同) TimThumb – 它是一个PHP,而不是一个C / C ++ 简而言之,我只是希望尽可能小的东西尽可能快地牺牲仅仅具有绝对最小的function但我到目前为止还没找到合适的候选者。 请问这个社区有什么建议吗? 但请记住我上面列出的限制 – 我不认为抛出表格的答案“你试过X吗?” “X”不符合我需要的一半:) 编辑 :进一步了解DevIL似乎可能是我需要的东西。 它轻巧,小巧,坚固耐用。 现在我只需要确保它执行。 […]

OpenCV:将内存中的指针转换为图像

我有一个抓取器可以获取图像并使用以下代码在屏幕上显示它们 while((lastPicNr = Fg_getLastPicNumberBlockingEx(fg,lastPicNr+1,0,10,_memoryAllc))<200) { iPtr=(unsigned char*)Fg_getImagePtrEx(fg,lastPicNr,0,_memoryAllc); ::DrawBuffer(nId,iPtr,lastPicNr,"testing"); } 但我想使用指向图像数据的指针并用OpenCV显示它们,因为我需要对像素进行处理。 我的相机是CCD单色相机,像素的深度是8位。 我是OpenCV的新手,opencv中是否有任何选项可以返回(unsigned char *)Fg_getImagePtrEx(fg,lastPicNr,0,_memoryAllc); 并在屏幕上显示它? 或者从iPtr指针获取数据允许我使用图像数据?

C图像库

任何人都可以推荐一个体面的C图像库? 我正在为bmp,gif,jpg,png和tga加载。 我想用它来编写我的索尼Playstation Portable ,因此开源非常方便。 经过一些谷歌搜索后我发现了FreeImage和CImg,但两者都感觉相当沉重,CImg是C ++而不是C.

C / C ++图片载入

我正在开发一个游戏引擎,我为多种格式编写图像加载器太麻烦了,所以我的问题是:是否有一个抽象的图像加载库来加载图像文件? 我只需要加载文件然后使用像素数组将它们打印到屏幕上。

图像缩放和C / C ++中的旋转

缩放2D图像arrays的最佳方法是什么? 例如,假设我有一个1024 x 2048字节的图像,每个字节都是一个像素。 每个像素都是从0到255的灰度级。我希望能够通过任意因子缩放此图像并获得新图像。 因此,如果我将图像缩放0.68倍,我应该得到一个大小为0.68 * 1024 x 0.68 * 2048的新图像。 一些像素将相互折叠。 而且,如果我按比例缩放3.15,我会得到一个更大的图像,像素被复制。 那么,实现这一目标的最佳方法是什么? 接下来,我希望能够将图像旋转任意角度,范围为0到360度(0 – 2Pi)。 旋转后裁剪图像不是问题。 最好的方法是什么?