Ⅰ 做图像识别算法用什么语言好
图像识别 C++ 语言是最好的。
有C的基础,入门很容易。
再往下就看你的天赋和学习能力了。
Ⅱ 在图像处理中c语言哪部分比较重要
C语言比只是一门工具,图像处理算法比较重要。C语言你只要明白指针还有各种地址推算就好了,其他都是浮云。图像处理也大部分都是指针操作,比如加载位图、对图像进行卷积等等,都是拿到图像的内存块起始地址的指针,然后再到具体的图像某个像素点在内存上的位置,做运算的。
Ⅲ 如何用c语言读取图片
#include
using namespace std;
#define Twoto1(i,j,w) i*w+j
void createimage(unsigned char *&img, int w, int h)
{img = new unsigned char[w*h];}
void delateimage(unsigned char*img)
{delete []img;}
void readimage(unsigned char*img, int w, int h, char *fname)
{
FILE *fp;
fopen_s(&fp,fname, "rb");
if (fp == NULL){ cout << "error" << endl; return; }
size_t result;
result=fread(img , sizeof(unsigned char), w*h, fp);
if (result != w*h)
{
cout << "Reading error" << endl;
return;
}
else
cout << "Reading Ok!" << endl;
fclose(fp);
}
void mobanjuanji(unsigned char image, unsigned char*image1, int w, int h, float moban[5][5])
{
for (int i = 0; i for (int j = 0; j if (iw - 3 || j>h - 3)
image1[Twoto1(i,j,w)] = 0;
else
{
float temp = 0;
for (int m = 0; m<5; m++)
for (int n = 0; n<5; n++)
{
temp += (image[Twoto1(i-2+m,j-2+n,w)] moban[m][n]);
}
if (temp>255) image1[Twoto1(i, j, w)] = 255;
else if (temp<0) image1[Twoto1(i, j, w)] = 0;
else image1[Twoto1(i, j, w)] = temp;
}
}
void saveimage(unsigned char *img, int w, int h, char *fname)
{
FILE *fp;
fopen_s(&fp, fname, "wb");
if (fp == NULL) { cout << "error" << endl; return; }
size_t result;
result = fwrite(img, sizeof(unsigned char), w*h, fp);
if (result != w*h)
{
cout << "Write error" << endl;
return;
}
else
cout << "Write Ok!" << endl;
fclose(fp);
}
void main()
{
unsigned char *img;
unsigned char *img1;
float moban[5][5] = { {0,0,0,0,0},{0, -1, 0, 1, 0 }, { 0, -2, 0, 2, 0 }, { 0, -1, 0, 1, 0 }, { 0,0,0,0,0 } };
//float moban[5][5] = { 0 };
int w = 512, h = 512;
createimage(img, w, h);
createimage(img1, w, h);
readimage(img, w, h, "E:ss.raw");
mobanjuanji(img, img1,w, h, moban);
saveimage(img, w, h, "E:ss_1.raw");
saveimage(img1, w, h, "E:ss_2.raw");
delateimage(img);
delateimage(img1);
}
(3)c语言图像识别算法扩展阅读
C语言实现一个图片的读出和写入
#include <stdlib.h>
#include <windows.h>
int file_size(char* filename)//获取文件名为filename的文件大小。
{
FILE *fp = fopen(filename, "rb");//打开文件。
int size;
if(fp == NULL) // 打开文件失败
return -1;
fseek(fp, 0, SEEK_END);//定位文件指针到文件尾。
size=ftell(fp);//获取文件指针偏移量,即文件大小。
fclose(fp);//关闭文件。
return size;
}
int main ()
{
int size=0;
size=file_size("qw");
printf("%d ",size);
FILE * pFile,*qw;
char *buffer=(char*)malloc(sizeof(char)*size);
qw =fopen("qw","r");
pFile = fopen ( "qwe" , "wb" );
printf("%d==
",pFile);
printf("%d ",size);
fread(buffer,1,size,qw);
fwrite (buffer , sizeof(byte), size , pFile );
fclose (pFile);
rename("qwe","Groot.jpg");
return 0;
}
Ⅳ 纯C语言实现图像处理
这个不难吧?虽然我不用c,可是说下怎么做,首先打开一个BMP文件,然后按照bmp格式解析到一个数组中,接着进行二值化(这个有很多方法),最后将数组中的数据写入一个新的BMP文件就可以了。
Ⅳ 哪种编程语言最适合做图像识别
c,很多算法都是用c写的,如果是汇编编写的优化算法也提供c语言接口以便调用。
Ⅵ 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);
}
Ⅶ 搞算法(图像识别,深度学习)必须要懂C/C++吗
由于图像识别、深度学习这方面已经有许多人做了基础性工作,他们提供的程序或者库都是利用c或c++形式提供的,或者是类似的调用接口,因此要利用这些库、将这些基本算法结合到自己的工程中来,需要c和c++的知识
算法应当是可移植的,同时又不能离硬件太远。可移植的特点是要求编程语言具备可移植性、通用性,c或c++是比较好的载体;所谓离硬件不太远,是因为要在算法优化方面有需求时,需要针对硬件特点,或者硬件提供的能力,做到发挥算法的最大效能,由于c语言可以很好地结合汇编语言和高级语言,因此在优化方面是比较灵活的。
如果大部分通用算法都是用c或c++编写的,为成为通用算法,你有可能需要顺应这一习惯,以便别人将你的算法结合到他们的c或c++工程中去。
往往你的算法是在别人编写的现有算法上改进得到,如果别人的算法就是c或c++编写的,你需要这方面的知识来消化别人算法的思路,理解成熟算法的意图。
Ⅷ 基于C语言的图像识别的经典材料吗
没有什么基于C语言的图像识别材料的,图像识别技术大多讲的都是各种算法。建议搜索一些OpenCV相关的资料,里面会有相关图像识别的内容。个人感觉用OpenCV来入门学习图像识别技术比较好,因为它把复杂的算法封装成API函数了,理解起来比那些枯燥的图像算法书籍要容易的多,因为后者更像是一本数学书,看起来费劲而且容易厌烦。等把OpenCV用熟,需要改某个API函数时,再去理解算法就容易的多
(以上是个人经验)
Ⅸ 怎样用C语言实现数字图像处理的局部直方图均衡算法
1、ctrl+alt+l,自动色阶。 2、手动调色阶,用黑场和白场吸取色样。 3、曲线调色。 4、图像调整,匹配颜色,勾选中和选项。 方法很多的,学会灵活运用哟
Ⅹ 用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.结论:有交集关系则为部分包含,有子集关系则有完全包含。
起始坐标比较好计算,即开始数据串的位置数,分解成大图的行列数。