有大佬用C处理过图像吗,萌新请教——救救孩子
对于图像的逆透视变换,用matlab实现 或者c实现 望大家不吝赐教 救命啊{:5_92:} 来人啊 easyx中 可以加载图片
yuesezhenmei 发表于 2019-8-14 16:35
easyx中 可以加载图片
我要对图像进行处理
python_小蟒蛇 发表于 2019-8-15 08:25
我要对图像进行处理
{:5_103:}那你还不如用Windows画图呢 bin554385863 发表于 2019-8-15 10:37
那你还不如用Windows画图呢
不太明白大佬说的是什么神仙思路{:5_100:}嘿嘿 python_小蟒蛇 发表于 2019-8-15 12:07
不太明白大佬说的是什么神仙思路嘿嘿
C 只是一门编程语言,图像处理需要软件.除非你自己用C图像库编写一个图像处理软件. //只能处理bmp格式 24位
#include <stdio.h>
#include <stdlib.h>
//字节对齐,不然加载的数据一4字节对齐,会出现问题
#pragma pack(push)
#pragma pack(2)
//bmp分为 bmp文件头 bmp信息头 调色盘(24 32 没有) 位图数据
//一下是前两个的定义,其实Windows.h有,但我这是手机(Linux 电脑没在旁边时弄得)
//所以就从网上扒下来了
typedefunsigned short WORD;
typedef unsigned long DWORD;
typedeflong LONG;
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
#pragma pack(pop)
int main(){
//图像的地址
char strFile = "黄鹤楼.bmp";
char strBuf;
FILE* fp = fopen(strFile,"rb");
if(fp == NULL) {
printf("打开文件失败...\n");
return -1;
}
//保存图像地址
FILE *fSava =fopen("灰度化.bmp","wb");
BITMAPFILEHEADER bmpFileHead;
BITMAPINFOHEADER bmpInfoHead;
fread(&bmpFileHead,sizeof(BITMAPFILEHEADER ),1,fp);
fread(&bmpInfoHead,sizeof( BITMAPINFOHEADER),1,fp);
//BMP以BM开头 位数是不是24位
if(bmpFileHead.bfType != 19978 || bmpInfoHead.biBitCount!=24){
printf("这啥图片,不合格\n");
getchar();
return -1;
}
printf("图片大小为:%dbyte\n分辨率:%d * %d\nbmp数据偏移:%dbyte\n",bmpFileHead.bfSize\
,bmpInfoHead.biWidth,bmpInfoHead.biHeight ,bmpFileHead.bfOffBits );
int size = bmpFileHead.bfSize - bmpFileHead.bfOffBits;
fwrite(&bmpFileHead,sizeof(bmpFileHead),1,fSava);
fwrite(&bmpInfoHead,sizeof(bmpInfoHead),1,fSava);
for(int i = 0; i < size; i+=3){
char color;
fread(color,1,3,fp);
char buf = (color + color +color)/3; //灰度化需要bmp格式 24位 32位多了个A
for(int j = 0; j < 3; j++){
fwrite(&buf,1,1,fSava);
}
}
fclose(fSava);
fclose(fp);
printf("写入完成!\n");
getchar();
return 0;
} 以上那个代码我只想说明C语言只依赖标准库也能对图像做处理,但我通常不会这么写,我会用Windows.h库....东西处理图片,因为里面麻烦的事不止这一点,这个是对全体处理还好,如果是想靠这种原始方法加载图片。。。(它的位图数据那块是从左下到右上排列不符合人的正常思维) 而且对与16 24 32 ..要分别做处理,而且有的位图数据对齐...... 所以还是用Windows.h里的东西吧,关注一下BITMAP HBITMAP GetObject GetBitmapBits SetBitmapBits ....之类的 我刚刚没看你下面还有个东西,逆透视是什么? 老张爱编程 发表于 2019-8-16 08:19
我刚刚没看你下面还有个东西,逆透视是什么?
就是图像变形了获取到的与实际不符合所以需要对图像矫正,比如梯形失真 python_小蟒蛇 发表于 2019-8-17 14:52
就是图像变形了获取到的与实际不符合所以需要对图像矫正,比如梯形失真
你这和开发一个图形处理软件有啥区别{:5_103:} 老张爱编程 发表于 2019-8-16 07:58
//只能处理bmp格式 24位
#include
#include
厉害,应该精通C语言了吧{:5_90:} 2164930278 发表于 2019-8-17 22:10
厉害,应该精通C语言了吧
精通倒是没有,我只是想知道bmp里面是什么东西,就稍稍研究了下,感觉window里面的exe...这些东西的里面充满许多未知
页:
[1]