A. 图像处理python和c语言哪个好
p是脚本语言,c是编译语言,p对于c多了一个字节码转机器码过程,运行速度c高。
p是用c写的。p有强大第三方库支持,所以开发成本周期都比c少。
所以就学习而言,c要学好。
就开发而言,不光图像处理,包括其他领域,一般不是非常底层不会用c,都会用相应的高级语言,要的是开发效率。
所以,单纯做图像处理相关开发,用p较好。
B. 如何在linux下编写C语言图像程序
1.进入字符界面
2.创建文件夹用于存放源文件
mkdir helloworld //创建文件夹命令
cd helloworld //进入新建的文件夹,这里应该说目录比较好,windows用习惯了
vim main.c //打开vim并创建main.c文件
//按 i 键进入编辑状态,以下是程序
#include
int main()
{
printf("Hello world!/n");
return 0;
}
按Esc进入命令模式,按 ZZ 保存退出
gcc main.c //编译
./a.out //运行,默认情况生成a.out可执行文件
虽然本程序很简单,但包含了在Linux上编程的基本思想,当看到熟悉的结果时,还是小得意了一下。
嘻嘻……
C. C语言图形编译
独立图形运行程序的建立
Turbo C对于用initgraph()函数直接进行的图形初始化程序, 在编译和链接
时并没有将相应的驱动程序(*.BGI)装入到执行程序, 当程序进行到intitgraph()
语句时, 再从该函数中第三个形式参数char *path中所规定的路径中去找相应的
驱动程序。若没有驱动程序, 则在C:\TC中去找, 如C:\TC中仍没有或TC不存在,
将会出现错误:
BGI Error: Graphics not initialized (use 'initgraph')
因此, 为了使用方便, 应该建立一个不需要驱动程序就能独立运行的可执行
图形程序,Turbo C中规定用下述步骤(这里以EGA、VGA显示器为例):
1. 在C:\TC子目录下输入命令:BGIOBJ EGAVGA
此命令将驱动程序EGAVGA.BGI转换成EGAVGA.OBJ的目标文件。
2. 在C:\TC子目录下输入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA
此命令的意思是将EGAVGA.OBJ的目标模块装到GRAPHICS.LIB库文件中。
3. 在程序中initgraph()函数调用之前加上一句:
registerbgidriver(EGAVGA_driver):
D. 用C++或C语言实现图象识别
1.将全部三个图像的 BMP 24Bits 全彩色位图数据整理成 long 型,BMP_Color_Data[i*m + j] = 65536*Blu[m][n] + 256*Gre[m][n] + Red[m][n] ...........二维图像数据保存成一维的 long 型数据串。
2.将小图像的位图数据按照大位图数据的行数为“周期” T 扫描,即将小位图的第一行 long 数据串作为样本,在大位图数据中寻找匹配段:如果有,则记录“部分匹配标志(即部分包含,交集关系)”按照那个周期 T 直接到下一“段”检查是否匹配,直至扫描完全样本数的段,如果全部符合匹配条件,则置“完全匹配标志(即完全包含,子集关系)”....在此任何段中,如果不匹配,则 break ;
3.结论:有交集关系则为部分包含,有子集关系则有完全包含。
起始坐标比较好计算,即开始数据串的位置数,分解成大图的行列数。
E. 请问高手:有哪些C语言编译器可以做图形程序(非VC)
现在主流的,基于PC的C语言编译器都支持图形程序,其自带的函数库中通常会提供一些基本的图形函数。但有一点切记:C是基于Dos模式的开发工具,其内置的函数无论多么丰富,多么强大,都不可能实现Windows或其它环境下的高分辨率和颜色位数,目前C环境下能达到的分辨率最高为640*480,色深最高为8位,即256种颜色,经本人测试,其颜色定义与Windows环境下的8位颜色定义有重大区别,所以在C环境下目前还不可能实现VC等开发环境所提供的强大的图形处理模块。
F. 纯C语言实现图像处理
#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);
}
G. c语言的图像编译过程不显
结尾最后一个大括号之前加上:
getch();
return 0;
试试。
H. C语言要在什么编译工具下才能编出有图形界面的程序
楼主,我是否可以把你的问题这样想:
你编写了一个图形界面,然后想调用鼠标操作是不是。
如果是这样的话,我可以给你几点参考意见(我是在win-TC下面运行)
首先,你要调用dos中断,从寄存器里面提取数据.
然后,利用图形绘制,画出图形(头文件在#include"graphics.h")
其次,要想通过鼠标实现功能,要自己编程实现。c语言没有现成的工具
最后,我留下我的Q942690451 验证为 网络鼠标 。如果有什麽问题的话,我们可以以前探讨
希望对你有帮助
I. c语言图像处理
c语言不自带图形处理方面的东西。TC特有的头文件graphics.h,其他编译环境都用不了,可移植性是零。而且TC实在太老,与现在c语言标准差距非常大。基本是无法运行现在的代码。所以不太建议你用它。
非要用纯c,可以自己写函数调用WindowsAP和GUI接口。而且需要包含windows.h头文件。
网上有个大神用c—free写的代码在附件里。
/*
纯C通过WindowsAPI编写的基本Windows图形界面
整理加原创,基本上每一句代码都有注释
通过C-Free3.5编译
*/
#include<string.h>//这个头文件在扩展名为.c时是不需要加的
#include<windows.h>//windowsapi必须包含的头文件
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数的前向声明
//参数说明:
//HINSTANCEhInstance当前实例句柄
//HINSTANCEhPrevInstance以前版本的遗留产物,现在总是置为NULL
//LPSTRlpCmdLine命令行的产生,可以从开始->获得程序运行的参数,由此传入
//intnCmdShow程序最初的显示模式,正常,最大化或最小化
//主函数的入口是WinMain,类型为int
//WINAPI标志是一种特定的调用,它定义了一种生成机器代码和放置函数参数的方式
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpcmdLine,intnCmdShow)
{
//TCHAR,TEXT都是统一单字节和双字节字符的类型,建议使用
staticTCHARszAppName[]=TEXT("MyFirstWindows");
staticTCHARszClassName[]=TEXT("MFWClass");
HWNDhwnd;//一定一个窗口句柄
MSGmsg;//定义一个消息结构体
WNDCLASSwndclass;//定义一个WNDCLASS结构用于注册窗口
wndclass.style=CS_HREDRAW|CS_VREDRAW;//窗口类的类风格,每当水平和垂直大小改变时完全刷新窗口
wndclass.lpfnWndProc=WndProc;//此窗口类所使用的窗口函数的入口地址
wndclass.cbClsExtra=0;//用于在类结构中预留一些额外的空间
wndclass.cbWndExtra=0;//用于在windows内部保存的窗口结构中预留一些额外的空间
wndclass.hInstance=hInstance;//指定所在程序的实例句柄
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//定制图标
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//定制鼠标图形
wndclass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);//定义背景颜色
wndclass.lpszMenuName=NULL;//指定窗口类的菜单
wndclass.lpszClassName=szClassName;//指定窗口类的类名
//注册窗口,参数为指向WNDCLASS结构的指针
//如果注册不成功,则弹出一个对话框说明情况
//MessageBox是仅有的可以在旧版本和新版本windows都可以运行的对话框
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("!"),szAppName,MB_ICONERROR);
return0;
}
//创建窗口
hwnd=CreateWindow(
szClassName,//窗口类的名称
TEXT("Title:MyFirstWindowsProgram.这里是标题"),//窗口标题
//WS_OVERLAPPEDWINDOW,//窗口显示风格,这行实际是一个预定义,相当于下面的集合,可以单独设置
WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX,
CW_USEDEFAULT,//初始x方向的位置
CW_USEDEFAULT,//初始y方向的位置
CW_USEDEFAULT,//初始x方向的大小
CW_USEDEFAULT,//初始y方向的大小
NULL,//父窗口句柄
NULL,//菜单句柄
hInstance,//程序实例句柄
NULL);//创建参数
//显示窗口,第一个参数hwnd是CreateWindow所创建的窗口的句柄
//第二个参数nCmdShow是主函数给的,由快捷方式获得
ShowWindow(hwnd,nCmdShow);
//刷新窗口,给窗口函数,在本程序中即WndProc发送一个WM_PAINT
UpdateWindow(hwnd);
//消息循环
while(GetMessage(&msg,NULL,0,0))//接受自己创建的所有窗口的所有消息
{
TranslateMessage(&msg);//将msg结构体传给windows以进行一些键盘转换,即将击键消息转换为字符消息
DispatchMessage(&msg);//再次将msg结构体传给windows,由windows将该消息发送给适当的窗口函数
}
return(int)msg.wParam;
}
//窗口函数
//参数说明:
//HWNDhwnd,接受消息的窗口句柄,由CreateWindow函数返回
//UINTmessage,消息标志符,用以标识消息,每个消息均有一个唯一对应的消息标识符
//WPARAMwParam,是WORDPARAM的意思,一个32位的消息参数,其含义和数值根据消息的不同而不同
//LPARAMlParam,是LONGPARAM的意思,一个32位的消息参数,其值和消息有关
//CALLBACK函数指由程序员定义,编程实现,而由windows系统调用的函数
LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
HDChdc;//定义一个设备描述表句柄结构体
//定义一个PAINTSTRUCT的绘制信息结构体,
//其包含了包含了当前无效矩形区域的坐标和其他信息,用于刷新用户区的内容
PAINTSTRUCTps;
RECTrect;//定义一个RECT结构体,其有left,top,right,bottom四个域
//处理传进的各种消息
switch(message)
{
//窗口创建
caseWM_CREATE:MessageBox(NULL,"MessageContent:ThisisWM_CREATE,这是WM_CREATE。",
"MessageTiTle这是对话框的标题",MB_OK);
return0;
//窗口绘制
caseWM_PAINT:hdc=BeginPaint(hwnd,&ps);//由BeginPaint开始,返回设备描述表以开始绘图
GetClientRect(hwnd,&rect);//获取用户区域的大小
//格式话文本输出
DrawText(hdc,TEXT("WindowsContent:Iamadeveloper.我为计算机而生。"),
-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);//以EndPaint结束,释放设备描述表句柄
return0;
//窗口消亡
caseWM_DESTROY:MessageBox(NULL,"MessageContent:ThisisWM_DESTROY,这是WM_DESTROY。",
"MessageTiTle这是对话框的标题",MB_OK);
PostQuitMessage(0);
return0;
}
//凡是窗口函数不予处理的消息应交由windows默认消息处理函数DefWindowProc处理
returnDefWindowProc(hwnd,message,wParam,lParam);
}
J. c语言如何编译才能输出以下图形
第一题,首先按行数循环,每一行内再循环,如果当前列号等于行号或者是该行最后一列,打印行号,否则打印空格即可