Herkese merhabalar arkadaşlar bu yazımızda sizlere C/C++ programlama dillerinde yazılmış görüntü işleme kodlarının tamamını paylaşacağız.
Görüntü işleme üniversitelerde matematik,bilgisayar mühendisliği,istatistik vb. gibi sayısal derslerde okutulan bir derstir.Bu derste bazı bölümler C/C++ programlama dilleri ile anlatılıyor.Bizde sizlere bu yazımızda tüm görüntü işleme kodlarını paylaşalım dedik.Artık bunlara bakarak neyin ne olduğunu öğrenebilirsiniz.
C/C++ Görüntü İşleme Kodları
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <math.h> #pragma pack(1) typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned int DWORD; typedef int LONG; typedef struct _BMPFH { BYTE bftype1; BYTE bftype2; DWORD bfsize; WORD bfreserved1; WORD bfreserved2; DWORD bfOffbits; } BMPFH; typedef struct _BMPIH { DWORD bisize; LONG biw; LONG bih; WORD biplane; WORD bibitcount; DWORD biComp; DWORD bisizeimage; LONG bix; LONG biy; DWORD biclused; DWORD biclimp; } BMPIH; typedef struct _PALET { BYTE rgbblue; BYTE rgbgreen; BYTE rgbred; BYTE rgbreserved; } PALET; typedef struct _IMAGE { BMPFH bmpfh; BMPIH bmpih; PALET *palet; BYTE *data; } IMAGE; IMAGE *ImageOku(IMAGE *image,char *filename) { BMPFH bmpfh; BMPIH bmpih; FILE *fp; DWORD r,satirsize,size; fp=fopen(filename,"rb"); if(fp==NULL) {printf("Dosya bulunamadı..");exit(1);} fread(&bmpfh,sizeof(BMPFH),1,fp); if(bmpfh.bftype1=='B' && bmpfh.bftype2=='M') { fread(&bmpih,sizeof(BMPIH),1,fp); image=(IMAGE *) malloc(bmpfh.bfsize); if(image==NULL) {printf("Bellek acilamadi..");exit(1);} image->bmpfh=bmpfh; image->bmpih=bmpih; r=0; if(bmpih.bibitcount==1) r=2; if(bmpih.bibitcount==4) r=16; if(bmpih.bibitcount==8) r=256; if(r!=0) { image->palet=(PALET *) malloc(4*r); fread(image->palet,4*r,1,fp); } satirsize=(image->bmpih.biw*image->bmpih.bibitcount+31)/32*4; size=satirsize*image->bmpih.bih; image->data=(BYTE *)malloc(size); fread(image->data,size,1,fp); } else { printf("Bitmap Dosyası Degildir"); system("pause");exit(1); } fclose(fp); return image; } |
Görüntü İşleme Resmin Negatifini Alma Kodları
1 2 3 4 5 6 7 8 9 10 |
void NegatifGoruntu(IMAGE *image) { LONG h,w,i,j,satirsize; h=image->bmpih.bih; w=image->bmpih.biw; satirsize=(w*image->bmpih.bibitcount+31)/32*4; for(i=0;i<h;i++) for(j=0;j<satirsize;j++) image->data[i*satirsize+j]=255-image->data[i*satirsize+j]; return; } |
Görüntü İşleme Görüntü Renk Kodları
1 2 3 4 5 6 7 8 9 10 |
void GoruntuRenk(IMAGE *image) { LONG h,w,i,j,satirsize; h=image->bmpih.bih; w=image->bmpih.biw; satirsize=(w*image->bmpih.bibitcount+31)/32*4; for(i=0;i<h;i++) for(j=0;j<satirsize;j++) image->data[i*satirsize+j]=i*j%255; return; } |
Görüntü İşleme Palet Değiştirme Kodları
1 2 3 4 5 |
void PaletDegis(PALET *palet) { LONG i; for(i=0;i<256;i++) { palet[i].rgbgreen=255-i; palet[i].rgbblue=255-i; palet[i].rgbred=255-i; } return; } |
Görüntü İşleme Eşik Kodları
1 2 3 4 5 6 7 8 |
void Esik(IMAGE *image, BYTE E) { LONG h,w,i,j,satirsize; h=image->bmpih.bih; w=image->bmpih.biw; satirsize=(w*image->bmpih.bibitcount+31)/32*4; for(i=0;i<h;i++) for(j=0;j<satirsize;j++) if(image->data[i*satirsize+j]<=E) image->data[i*satirsize+j]=0; else image->data[i*satirsize+j]=255; return; } |
Görüntü İşleme Bölgesel Eşik Kodları
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
void BolgeselEsik(IMAGE *image, int boyut) { LONG i,j,k,l,h,w,sz; double T=0; BYTE E; h=image->bmpih.bih; w=image->bmpih.biw; sz=(w*image->bmpih.bibitcount+31)/32*4; for(i=0;i<h;i+=boyut) for(j=0;j<sz;j+=boyut) { T=0; for(k=0;k<boyut;k++) for(l=0;l<boyut;l++) T+=image->data[(i+k)*sz+j+l]; E=(BYTE) (T/(boyut*boyut)); for(k=0;k<boyut;k++) for(l=0;l<boyut;l++) if(image->data[(i+k)*sz+j+l]<=E) image->data[(i+k)*sz+j+l]=0; else image->data[(i+k)*sz+j+l]=255; } return; } |
Görüntü İşleme Resim Bilgisi Kodları
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
void ImageInfo(IMAGE *image) { printf("\n--------------- BMP Dosya Bilgileri --------------"); printf("\n Tip(ilk Karakter) :%c",image->bmpfh.bftype1); printf("\n Tip(ikinci Karakter) :%c",image->bmpfh.bftype2); printf("\n Dosya Büyüklügü :%d",image->bmpfh.bfsize); printf("\n 1. reserv alanı :%d",image->bmpfh.bfreserved1); printf("\n 2. reserv alanı :%d",image->bmpfh.bfreserved2); printf("\n Data baslangic yeri :%d",image->bmpfh.bfOffbits); printf("\n--------------- Goruntuye ait Bilgiler --------------"); printf("\n Goruntu Baslik Buyuklugu :%d",image->bmpih.bisize); printf("\n Goruntu Genisligi :%d",image->bmpih.biw); printf("\n Goruntu Yuksekligi :%d",image->bmpih.bih); printf("\n Goruntu Duzlem Degeri :%d",image->bmpih.biplane); printf("\n 1 pixelin kac bit degeri :%d",image->bmpih.bibitcount); printf("\n 1 pixelin compression degeri :%d",image->bmpih.biComp); printf("\n 1 Data Buyuklugu :%d",image->bmpih.bisizeimage); printf("\n dusey cozunurluk :%d",image->bmpih.bix); printf("\n yatay cozunurluk :%d",image->bmpih.biy); printf("\n Kullanilan renk sayısı :%d",image->bmpih.biclused); printf("\n Renk Onem Degeri :%d",image->bmpih.biclimp); return; } |
Görüntü İşleme Histogram Kodları
1 2 3 4 5 6 7 8 9 10 11 12 |
void Histogram(IMAGE *image) { LONG i,j,h,w,sz; double hist[256]; FILE *fp; h=image->bmpih.bih; w=image->bmpih.biw; sz=(w*image->bmpih.bibitcount+31)/32*4; fp=fopen("hist.txt","w"); for(i=0;i<256;i++) hist[i]=0; for(i=0;i<h*sz;i++) hist[image->data[i]]++; for(i=0;i<256;i++) fprintf(fp,"%d %5.0lf\n",i,hist[i]); fclose(fp); return; } |
Görüntü İşleme Histogram Eşitleme Kodları
1 2 3 4 5 6 7 8 9 10 11 12 |
void HistogramEsitle(IMAGE *image) { double Hist[256],t=0; LONG i,j,h,w,sz; h=image->bmpih.bih; w=image->bmpih.biw; sz=(w*image->bmpih.bibitcount+31)/32*4; for(i=0;i<256;i++) { t+=Hist[i]; Hist[i]=t/(h*w)*255+0.5; } for(i=0;i<h;i++) for(j=0;j<sz;j++) image->data[i*sz+j]=(BYTE) Hist[image->data[i*sz+j]]; return; } |
Görüntü İşleme Resim Yazdırma Kodları
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void ImageYaz(IMAGE *image,char *filename) { FILE *fp; int r,satirsize,size; fp=fopen(filename,"wb"); if(fp==NULL) {printf("Dosya hatası..");exit(1);} fwrite(&image->bmpfh,sizeof(BMPFH),1,fp); fwrite(&image->bmpih,sizeof(BMPIH),1,fp); r=0; if(image->bmpih.bibitcount==1) r=2; if(image->bmpih.bibitcount==4) r=16; if(image->bmpih.bibitcount==8) r=256; if(r) fwrite(image->palet,4*r,1,fp); satirsize=(image->bmpih.biw*image->bmpih.bibitcount+31)/32*4; size=satirsize*image->bmpih.bih; fwrite(image->data,size,1,fp); fclose(fp); } |
Görüntü İşleme Mean Hesaplama Kodları
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
void MeanF(IMAGE *image,BYTE n) { LONG i,j,h,w,sz,k,l,m; double Maske[7][7],T; BYTE M[7][7]; BYTE *data; for(i=0;i<7;i++) for(j=0;j<7;j++) Maske[i][j]=1./(n*n+1); Maske[n/2][n/2]*=2; h=image->bmpih.bih; w=image->bmpih.biw; sz=(w*image->bmpih.bibitcount+31)/32*4; data=(BYTE*)malloc(h*sz); if(data==NULL) exit(1); memcpy(data,image->data,h*sz); if(n==3) m=1; if(n==5) m=2; if(n==7) m=3; for(i=m;i<h-m;i++) for(j=m;j<sz-m;j++) { for(k=-m;k<=m;k++) for(l=-m;l<=m;l++) M[k+m][l+m]=data[(i+k)*sz+j+l]; T=0; for(k=0;k<n;k++) for(l=0;l<n;l++) T+=Maske[k][l]*M[k][l]; image->data[i*sz+j]=(BYTE) T; } free(data); return; } |
Görüntü İşleme Yüksek Geçiren Kodları
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
void YuksekGeciren(IMAGE *image,double Gx[3][3],double Gy[3][3]) { BYTE M[3][3]; double TGx,TGy; BYTE *data; LONG i,j,h,w,k,l,n,sz,m=3; h=image->bmpih.bih; w=image->bmpih.biw; sz=(image->bmpih.bibitcount*w+31)/32*4; data=(BYTE *) malloc(sz*h); if(data==NULL) {printf("bellek hatası");system("pause");exit(1);} memcpy(data,image->data,h*sz); n=1; for(i=n;i<h-n;i++) for(j=n;j<sz-n;j++) { for(k=-n;k<=n;k++) for(l=-n;l<=n;l++) M[k+n][l+n]=data[(i+k)*sz+j+l]; TGx=TGy=0; for(k=0;k<m;k++) for(l=0;l<m;l++) { TGx+=(double) M[k][l]*Gx[k][l]; TGy+=(double) M[k][l]*Gy[k][l]; } TGx=sqrt(TGx*TGx+TGy*TGy); if(TGx<0) TGx=0; if(TGx>255) TGx=255; image->data[i*w+j]=(BYTE)TGx; } free(data); return; } |
Görüntü İşleme Laplace Kodları
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
void Laplacian(IMAGE *image,double L[3][3]) { BYTE M[3][3]; double T; BYTE *data; LONG i,j,h,w,k,l,n,sz,m=3; h=image->bmpih.bih; w=image->bmpih.biw; sz=(image->bmpih.bibitcount*w+31)/32*4; data=(BYTE *) malloc(sz*h); if(data==NULL) {printf("bellek hatası");system("pause");exit(1);} memcpy(data,image->data,h*sz); n=1; for(i=n;i<h-n;i++) for(j=n;j<sz-n;j++) { for(k=-n;k<=n;k++) for(l=-n;l<=n;l++) M[k+n][l+n]=data[(i+k)*sz+j+l]; T=0; for(k=0;k<m;k++) for(l=0;l<m;l++) T+=(double) M[k][l]*L[k][l]; if(T<0) T=0; if(T>255) T=255; image->data[i*w+j]=(BYTE)T; } free(data); return; } |
Görüntü İşleme Ana Fonksiyon(Main) Kodları
1 2 3 4 5 6 7 8 9 10 |
main() { IMAGE *image; image=ImageOku(image,"parmakizi.bmp"); Histogram(image); ImageYaz(image,"test4.bmp"); free(image); system("pause"); return 0; } |
Görüntü işleme dersinde kullanılan tüm C/C++ kodları bu şekildedir arkadaşlar.Umarız faydalı olur.Herkese iyi dersler iyi çalışmalar dileriz…
Bu Yazıya Tepkin Ne Oldu ?