發表文章

目前顯示的是 8月, 2011的文章

cvSetData測試

圖片
IplImage *image = cvLoadImage("D:\\original(W).bmp" ,1); IplImage *rere =new IplImage; cvInitImageHeader(rere, cvSize( image->width,image->height), 8, 3,IPL_ORIGIN_BL, 4); cvSetData(rere, image->imageData, image->widthStep ); int cannyV1 = 150; int cannyV2 = 50; IplImage *image_Gray =cvCreateImage(cvSize(image->width , image->height) ,image->depth ,1); IplImage *image_Canny = cvCreateImage(cvSize(image->width , image->height) ,image->depth ,1); CvMemStorage *storage = cvCreateMemStorage(0); CvSeq *seq =0; cvCvtColor(image , image_Gray ,CV_BGR2GRAY); cvCanny(image_Gray ,image_Canny , cannyV1 ,cannyV2 ,3); seq = cvHoughLines2(image_Canny , storage , CV_HOUGH_PROBABILISTIC , 1 ,  CV_PI/180, 100, 20, 10 ); for(int i=0 ;i< seq->total ; i++) { CvPoint* line = (CvPoint*)cvGetSeqElem(seq,i); cvLine(rere , line[0] ,line[1] , CV_RGB(255, 0, 0) ,2 ,8 ,0); } cvShowImage("A" ,image); cvShowImage(&q

Bmp結構

第一部份是 BITMAPFILEHEADER,它是一個長 14 位元組的結構體,其定義是: BITMAPFILEHEADER    STRUC bfType              // 長兩個位元組,其意義為 ASCII 碼的『BM』,它代表 BMP 檔的識別字 bfSize               //bfSize 是這個位元圖的檔案長度,以位元組為單位 bfReserved1    //保留欄位,必定為 0 bfReserved2    //保留欄位,必定為 0 bfOffBits   DD      //位元資料相對於檔案頭的偏移量,以位元組為單位。 第二部份是 BITMAPINFOHEADER 結構體,其組成欄位是: BITMAPINFOHEADER    STRUC biSize             //biSize 是這個結構體的長度,以位元組為單位 biWidth           //表示位元圖的寬度,以點為單位 biHeight          //表示位元圖的長度,以點為單位。此值若為正,則起點為左下往右至上、負值為                左上往右至下 biPlanes          //這是早期顯示卡硬體尚未發達時遺留下來的,如今已廢棄不用,必為 1 biBitCount       //表示每一點需要用多少位元,只可以是 1、4、8、16、24 或 32 biCompression  //壓縮方式,可以是 BI_RGB、BI_RLE8、BI_RLE4、BI_BITFIELDS 值,其中 BI_RGB 是完全無壓縮的,也是最常用的。 biSizeImage        //BMP 檔的長度,以位元組為單位。 biXPelsPerMeter    //圖寬的解析度,以每公尺有多少點 biYPelsPerMeter    //圖高的解析度,以每公尺有多少點 biClrUsed          //當 biBitCount 不是 1、4、8、16、24 或 32 這些標準的數時使用的。 biClrImportant    //當 biBitCount 不是 1、4、8、16、24 或 32 這些標準的數時使用的。 第三部份是色彩對照表,它是由許多數目不定的 RGBQU

cvSmooth

圖片
IplImage *image = cvLoadImage("r.bmp" ,1); IplImage *gray  = cvCreateImage(cvSize(image->width ,image->height) ,image->depth , 1); IplImage *BLUR_NO_SCALE  = cvCreateImage(cvSize(image->width ,image->height) ,image->depth , 1); IplImage *BLUR  = cvCreateImage(cvSize(image->width ,image->height) ,image->depth , 1); IplImage *GAUSSIAN  = cvCreateImage(cvSize(image->width ,image->height) ,image->depth , 1); IplImage *MEDIAN  = cvCreateImage(cvSize(image->width ,image->height) ,image->depth , 1); IplImage *BILATERAL  = cvCreateImage(cvSize(image->width ,image->height) ,image->depth , 1); cvCvtColor(image , gray ,CV_BGR2GRAY); cvShowImage("image " ,image); cvShowImage("gray " ,gray); cvSmooth(gray ,BLUR_NO_SCALE ,CV_BLUR_NO_SCALE  ,9,9); cvShowImage("CV_BLUR_NO_SCALE " ,BLUR_NO_SCALE); cvSmooth(gray ,BLUR  ,CV_BLUR   ,9,9); cvShowImage("CV_BLUR "

IplImage資料結構

typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; /* 版本 (=0) */ int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */ int alphaChannel; /* 被OpenCV忽略 */ int depth; /* 像素的位深度,主要有以下支持格式: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F 和IPL_DEPTH_64F */ char colorModel[ 4 ]; /* 被OpenCV忽略 */ char channelSeq[ 4 ]; /* 同上 */ int dataOrder; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道. 只有cvCreateImage可以创建交叉存取图像 */ int origin; /* 图像原点位置: 0表示顶-左结构,1表示底-左结构 */ int align; /* 图像行排列方式 (4 or 8),在 OpenCV 被忽略,使用 widthStep 代替 */ int width; /* 图像宽像素数 */ int height; /* 图像高像素数 */ struct _IplROI * roi; /* 图像感兴趣区域,当该值非空时, 只对该区域进行处理 */ struct _IplImage * maskROI; /* 在 OpenCV中必须为NU

cvMatchTemplate

圖片
    IplImage *src, *templ,*ftmp[6];     int i; double minval , maxval; CvPoint minloc ,maxloc; src=cvLoadImage("test.jpg", 1); templ=cvLoadImage("temp.jpg", 1);     int iwidth = src->width - templ->width + 1;     int iheight = src->height - templ->height + 1;    for(i=0; i<6; ++i){         ftmp[i] = cvCreateImage( cvSize(iwidth,iheight),32,1);     }    //進行匹配,取各圖的最高最低值並歸一畫   for(i=0; i<6; ++i){         cvMatchTemplate( src, templ, ftmp[i], i); cvMinMaxLoc(ftmp[i] ,&minval ,&maxval ,&minloc ,&maxloc); cvNormalize(ftmp[i],ftmp[i],1,0,CV_MINMAX); //在原圖劃出偵測到的位置(在此試取最高值) cvLine(src , maxloc , cvPoint(maxloc.x + templ->width ,maxloc.y) ,CV_RGB(255,0,0) , 1, 8,0); cvLine(src , maxloc , cvPoint(maxloc.x ,maxloc.y + templ->height) ,CV_RGB(255,0,0) , 1, 8,0); cvLine(src , cvPoint(maxloc.x + templ->width ,maxloc.y) , cvPoint(maxloc.x + templ->width ,maxloc.y + templ->height) ,CV_RGB

cvResize

IplImage *image = cvLoadImage("Sunset.jpg" ,1);          IplImage * reimage; CvSize re_size; re_size.height = 500; re_size.width =500; reimage = cvCreateImage(re_size ,image->depth ,image->nChannels); cvResize(image ,reimage ,1); printf("image width:%i heigth:%i \n" ,image->width ,image->height); printf("reimage width:%i heigth:%i" ,reimage->width ,reimage->height); cvNamedWindow("image" ,1); cvNamedWindow("reimage" ,1); cvShowImage("image",image); cvShowImage("reimage",reimage);     cvWaitKey(0);

cvMinMaxLoc

圖片
獲取圖片顏色最大最小值及其位置 cvMinMaxLoc(影像 , & MinValue, & MaxValue, & MinLocation, & MaxLocation);     cvSetImageCOI(image,1);     cvMinMaxLoc(image,&MinValue,&MaxValue,&MinLocation,&MaxLocation);     printf("The Min number is : %.f\n",MinValue);     printf("The position is : ( %d , %d )\n",MinLocation.x,MinLocation.y);     printf("The Max number is : %.f\n",MaxValue);     printf("The position is : (%d , %d )\n",MaxLocation.x,MaxLocation.y);     cvNamedWindow("grotto",1);     cvShowImage("grotto",image);     cvWaitKey(0); }

cvCvtColor、cvCanny

圖片
  IplImage *image = cvLoadImage("D:\\Sunset.jpg" ,1); IplImage *image_Gary = cvCreateImage(cvSize(image->width ,image->height) ,image->depth ,1); IplImage *image_Canny = cvCreateImage(cvSize(image->width ,image->height) ,image->depth ,1); cvCvtColor(image ,image_Gary , CV_BGR2GRAY);//轉回灰階         //只接收灰階圖 cvCanny(image_Gary , image_Canny ,30 ,170 ,3); cvNamedWindow("Sunset" ,1); cvNamedWindow("image_Gary" ,1); cvNamedWindow("image_Canny" ,1); cvShowImage("Sunset" ,image); cvShowImage("image_Gary" ,image_Gary); cvShowImage("image_Canny" ,image_Canny); cvWaitKey(0); cvReleaseImage(&image); cvDestroyAllWindows();

bmp

bmp由 四個部份組成: Bitmap File Header(檔頭資訊) >> 前54位元組 Bitmap Info Header(圖形描述資訊) Color Table (Palette)(顏色表) Bitmap Array(圖形資料區塊) BMP 儲存圖點資料的順序是先列後行,由下而上,與一般圖檔由上 而下的儲存方式不同。 (由圖形的左下角開始,由左而右,由下) 標頭檔裡面為 54 Bytes(位元組)的內容, 分成 15 個欄位, 依序:   1.常數字元 'B' 'M'  2 Bytes   2.檔案大小(Bytes) 4 Bytes   3.常數欄位( 皆0 ) 4 Bytes   4.畫素資料起始位址 4 Bytes   5.常數欄位(皆為0x28=40) 4 Bytes   6.圖像寬度(Pixel) 4 Bytes   7.圖像高度(Pixel) 4 Bytes   8.色平面數(張) 2 Bytes   9.顏色深度(Bits) 2 Bytes 10.壓縮模式(未壓縮為0) 4 Bytes 11.實際畫素資料大小(Bytes) 4 Bytes 12.水平解析度(每公尺) 4 Bytes 13.垂直解析度(每公尺) 4 Bytes 14.使用顏色數目 4 Bytes 15.主要顏色數目 4 Bytes 54=2+4+4+4+4+4+4+2+2+4+4+4+4+4+4 [筆記] BMP點陣圖格式說明,附實例圖解 http://jinnsblog.blogspot.com/2009/08/bmp-format-graphic-illustration.html 點陣圖(Bitmap)檔案格式 http://crazycat1130.pixnet.net/blog/post/1345538 附錄   BMP 檔案格 http://www.mem.nsysu.edu.tw/~CCCheng/bmp.pdf 維基百科(含有公式) http://zh.wikipedia.org/wiki/BMP BMP圖檔格式 http://www.wretch.cc/blog/benjay207/12157833

Bmp to IplImage

IplImage * BmpTOIpl(unsigned char *pBuffer ,int width,int height) { IplImage *image =new IplImage; cvInitImageHeader(image, cvSize(width,height), 8, 3,IPL_ORIGIN_BL, 4); //創建iplimage //InitImageHeader(圖像 , 寬高 , 精度(深度) , 通道數 , IPL_ORIGIN_BL( or TL)  ,圖像行列數 )   初始化 cvSetData(image, pBuffer, width*3); //copy數據 //SetData(圖像, 數據 , 大小) return image; } 2011.8.26--此方法發現image的資料與原資料為同一位址,其一個將圖像做處理,兩個圖顯示出來皆會改變。(應為SetData問題)