當前位置:首頁 » 編程語言 » c語言圖像識別演算法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言圖像識別演算法

發布時間: 2022-04-22 09:14:00

Ⅰ 做圖像識別演算法用什麼語言好

圖像識別 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.結論:有交集關系則為部分包含,有子集關系則有完全包含。

起始坐標比較好計算,即開始數據串的位置數,分解成大圖的行列數。