纯C语言实现图像处理?

哪位大哥知道如何用纯C语言(不能用Turbo C ,windows API 和 MFC)对BMP图像实行二值化处理,最好有源代码,非常感谢!!
好的话我肯定追加分数!!!

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define ONE 255
#define ZERO 0
/*
typedef struct tagBITMAPFILEHEADER { // bmfh
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{ // bmih
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
*/
void main (int argc,char *argv[])
{
FILE *fi,*fo;//I/O file
char fin[80],fon[80];//I/O file name
unsigned char **ri,**ro;
unsigned char buff;
long w,h;
int t;
int i,j;
if(argc<3)
{
printf("orginfile name:");
scanf("%s",fin);
printf("resultfile name:");
scanf("%s",fon);
}else{
sscanf(argv[1],"%s",fin);
sscanf(argv[2],"%s",fon);
}
if(argc==4)
sscanf(argv[4],"%d",&t);
else{
printf("theshold [0,255]:");
scanf("%d",&t);
}

if (((fi=fopen(fin,"rb"))==NULL)||((fo=fopen(fon,"wb"))==NULL))
{
puts("\nfile open failed");
return;
}

fseek(fi,18L,SEEK_SET);
fread(&w,sizeof(long),1,fi);
fread(&h,sizeof(long),1,fi);

fseek(fi,0L,SEEK_SET);

ri=(unsigned char **)malloc(sizeof(unsigned *)*h);
for (i=0;i<h;i++)
*(ri+i)=(unsigned char *)malloc(sizeof(unsigned)*w);

ro=(unsigned char **)malloc(sizeof(unsigned *)*h);
for (i=0;i<h;i++)
*(ro+i)=(unsigned char *)malloc(sizeof(unsigned)*w);
//分配失败后果自负!

for (i=0;i<32;i++){
fread(&buff,sizeof(buff),1,fi);
fwrite(&buff,sizeof(buff),1,fo);}
for (i=0;i<h;i++)
for (j=0;j<w;j++)
fread(*(ri+i)+j,sizeof(unsigned char),1,fi);

for (i=0;i<h;i++)
for (j=0;j<w;j++)
*(*(ro+i)+j)=((*(*(ri+i)+j)<=t)?ZERO:ONE);
for (i=0;i<h;i++)
for (j=0;j<w;j++)
fwrite(*(ro+i)+j,sizeof(unsigned char),1,fo);
fclose(fo);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-02
这个不难吧?虽然我不用c,可是说下怎么做,首先打开一个BMP文件,然后按照bmp格式解析到一个数组中,接着进行二值化(这个有很多方法),最后将数组中的数据写入一个新的BMP文件就可以了。
第2个回答  2020-05-31
#include
<stdio.h>
#include
<stdlib.h>
#include
<conio.h>
#define
ONE
255
#define
ZERO
0
/*
typedef
struct
tagBITMAPFILEHEADER
{
//
bmfh
WORD
bfType;
DWORD
bfSize;
WORD
bfReserved1;
WORD
bfReserved2;
DWORD
bfOffBits;
}
BITMAPFILEHEADER;
typedef
struct
tagBITMAPINFOHEADER{
//
bmih
DWORD
biSize;
LONG
biWidth;
LONG
biHeight;
WORD
biPlanes;
WORD
biBitCount
DWORD
biCompression;
DWORD
biSizeImage;
LONG
biXPelsPerMeter;
LONG
biYPelsPerMeter;
DWORD
biClrUsed;
DWORD
biClrImportant;
}
BITMAPINFOHEADER;
*/
void
main
(int
argc,char
*argv[])
{
FILE
*fi,*fo;//I/O
file
char
fin[80],fon[80];//I/O
file
name
unsigned
char
**ri,**ro;
unsigned
char
buff;
long
w,h;
int
t;
int
i,j;
if(argc<3)
{
printf("orginfile
name:");
scanf("%s",fin);
printf("resultfile
name:");
scanf("%s",fon);
}else{
sscanf(argv[1],"%s",fin);
sscanf(argv[2],"%s",fon);
}
if(argc==4)
sscanf(argv[4],"%d",&t);
else{
printf("theshold
[0,255]:");
scanf("%d",&t);
}
if
(((fi=fopen(fin,"rb"))==NULL)||((fo=fopen(fon,"wb"))==NULL))
{
puts("\nfile
open
failed");
return;
}
fseek(fi,18L,SEEK_SET);
fread(&w,sizeof(long),1,fi);
fread(&h,sizeof(long),1,fi);
fseek(fi,0L,SEEK_SET);
ri=(unsigned
char
**)malloc(sizeof(unsigned
*)*h);
for
(i=0;i<h;i++)
*(ri+i)=(unsigned
char
*)malloc(sizeof(unsigned)*w);
ro=(unsigned
char
**)malloc(sizeof(unsigned
*)*h);
for
(i=0;i<h;i++)
*(ro+i)=(unsigned
char
*)malloc(sizeof(unsigned)*w);
//分配失败后果自负!
for
(i=0;i<32;i++){
fread(&buff,sizeof(buff),1,fi);
fwrite(&buff,sizeof(buff),1,fo);}
for
(i=0;i<h;i++)
for
(j=0;j<w;j++)
fread(*(ri+i)+j,sizeof(unsigned
char),1,fi);
for
(i=0;i<h;i++)
for
(j=0;j<w;j++)
*(*(ro+i)+j)=((*(*(ri+i)+j)<=t)?ZERO:ONE);
for
(i=0;i<h;i++)
for
(j=0;j<w;j++)
fwrite(*(ro+i)+j,sizeof(unsigned
char),1,fo);
fclose(fo);
}
第3个回答  2019-08-09
我建议你看一下《c语言编程宝典》这本电子书。

纯C语言实现图像处理?
include <stdlib.h> include <conio.h> define ONE 255 define ZERO 0 \/ typedef struct tagBITMAPFILEHEADER { \/\/ bmfh WORD bfType;DWORD bfSize;WORD bfReserved1;WORD bfReserved2;DWORD bfOffBits;} BITMAPFILEHEADER;typedef struct tagBITMAPINFOHEADER{ \/\/ bmih DWORD biSize;...

C语言图像处理方法?
⑵擦除原图像。⑶计算平移后的新坐标。⑷在新的坐标位置重新显示原图像。2.图像颠倒 图像颠倒是指把定义好的图像区域上下翻转地显示在屏幕上。分析图像颠倒的过程,可发现每行的图像信息都保持不变,而只是改变了行的顺序,将第一行与最后的第n行相互交换,第二行与第n-1行交换,依此类推,从而实...

用C语言编写程序处理图片bmp文件 1.读取图片的宽度,高度,每个像素所需...
include <windows.h>\/\/读bmp图片需要两个结构#pragma pack(push, enter_defBM, 1) \/\/指定内存对齐单位为1。typedef struct tagBmpFileHeader{WORD bfType; \/\/ 文件类型 BMDWORD bfSize; \/\/ 文件大小WORD bfReserved1; \/\/ 保留字WORD bfReserved2; \/\/ 保留字DWORD bfOffBits; \/\/...

学习图像处理需要哪些编程语言?c还是c++
最开始先学习matlab吧,这样做图像处理的时候可以实时查看效果;opencv开源库使用方便,网上很多教程 可以用c、c++、python调用也可以实时查看处理效果。学习图像处理的关键是理解各种图像处理的算法而不是语言。

c语言如何实现图像对比
1.用loadimage将两张图片加载 2.用putimage输出第一张 3.用putimage输出第二张, 但是第四个参数选择XOR_PUT(图像和原有像素作异或运算)相同颜色的点将被抹除而只留下不同部分(但是颜色不能保证正确).此方法可以快速直观得到不同处(找茬外挂专用)准确的方法:1.load两张图片 2.用getpixel逐个对比两张...

图像处理python和c语言哪个好
p对于c多了一个字节码转机器码过程,运行速度c高。p是用c写的。p有强大第三方库支持,所以开发成本周期都比c少。所以就学习而言,c要学好。就开发而言,不光图像处理,包括其他领域,一般不是非常底层不会用c,都会用相应的高级语言,要的是开发效率。所以,单纯做图像处理相关开发,用p较好。

c语言、c#还有java中,用哪种做图像处理更好?
单纯就编程语言来讲,C语言是三种语言里面最快的,因为C相对更接近于底层语言,而C#和JAVA是更高级的面向对象的语言,但对图像的处理支持更丰富,一般操作起来会比C语言更方便。尤其是C#,在.NET平台上的C#已经相当成熟了,应该来讲是使用起来最方便的。JAVA当然也是很优秀的语言,而且现在做JAVA程序...

做C语言 图像处理方向前景怎么样,工作好找吗
图像处理只是一个工具而已,如果靠这个吃饭,有点难,除非你是大牛。c语言可以做嵌入式,做驱动都挺好的,别局限了自己。

C语言实现CNN
代码实现包含对图像数据的读取、网络结构建立、参数初始化、激活函数应用、卷积、池化操作以及最终分类功能的实现。在C语言中实现CNN,需要深入理解数据结构和算法过程,以正确处理和操作各种变量和数组。尽管文中提到使用不同IDE时可能出现变量传参问题,但关键在于正确理解代码逻辑并确保数据类型和操作兼容性。

C语言编程 做个图像处理 二值化块化后恢复
图三区域的RGB平均值,分别求R G B 的平均值啊,这要什么代码?

相似回答