發表文章

目前顯示的是 2011的文章

在無BCB電腦上執行BCB執行檔

圖片
開啟BCB後,選擇所要的專案。 Project > Options... > Linker > Use dtnamic RTL  的打勾取消 Project > Options... > Packages > 將Build with runtime packages  的打勾取消 完成以上步驟即可在沒有安裝BCB軟體的電腦上執行BCB專案的exe檔

OpenCV with BCB6

圖片
**BCB目前只能使用OpenCV 1.X版本** 此範例為BCB6 及 OpenCV1.0 使用前需要將OpenCV的.lib專為BCB6可用的.lib BCB內建的編譯程式為coff2omf.exe(可在C:\Program Files (x86)\Borland\CBuilder6\Bin中找到) 在C碟建立一個資料夾名稱為cv,在建立另一資料夾名稱為bcblib 將OpenCV的lib(C:\Program Files (x86)\OpenCV\lib)中的lib複製到cv資料夾內 在C:\cv資料夾裡新建一個文字檔(txt),並將以下內容貼上 coff2omf -lib:ms C:\cv\cv.lib C:\bcblib\bcv.lib coff2omf -lib:ms C:\cv\cvaux.lib C:\bcblib\bcvaux.lib coff2omf -lib:ms C:\cv\cvhaartraining.lib C:\bcblib\bcvhaartraining.lib coff2omf -lib:ms C:\cv\cxcore.lib C:\bcblib\bcxcore.lib coff2omf -lib:ms C:\cv\cxts.lib C:\bcblib\bcxts.lib coff2omf -lib:ms C:\cv\highgui.lib C:\bcblib\bhighgui.lib coff2omf -lib:ms C:\cv\ml.lib C:\bcblib\bml.lib 完成後將該文字檔重新命名為coff2omf.bat,並點擊該檔案(需先將coff2omf.exe複製到此資料夾),在BCB可用之lib便會生成在bcblib資料夾裡。 上述步驟完成後, 打開BCB並開新專案。在工具列中點選Project > Add to Project... 將剛所建造之BCB可用之lib導入專案。 工具列點選Project > Options 在Include Path加入OpenCV中Include的路徑 (範例中只有以下五個路徑) C:\Program Files (x86)\OpenCV\cv\include C:\Program Files (x86)\

pie Chart

圖片
須先導入物件,懶人可以全部導入 (此範例全導入為import org.jfree.chart.*;、import org.jfree.data.*;、import org.jfree.data.general.*;)            //DefaultPieDataset 指的資料只能使用在圓餅圖,他為JFreeChart中的data底下方法(org.jfree.data.general.DefaultPieDataset;)         DefaultPieDataset dataset = new DefaultPieDataset();         dataset.setValue("Category 1", 43.2);       //setValue為設定資料         dataset.setValue("Category 2", 27.9);       //setValue(類別名稱,值)         dataset.setValue("Category 3", 79.5);                    //創造圓餅圖(import org.jfree.chart.JFreeChart;、import org.jfree.chart.ChartFactory;)         JFreeChart chart = ChartFactory.createPieChart(                 "Sample Pie Chart", //圖表名稱                 dataset,            //數據                 false,               //是否附上說明(底下)                 false,               //顯示工具列                 false               //顯示URL                 );                     //創造視窗餅顯示圖形(org.jfree.chart.ChartFrame;)         ChartF

JFreeChart in NetBeans

圖片
下載JFreeChart套件,解壓縮後找到以下兩jar檔 1.  jfreechart-1.0.0-rc1.jar:這是 JFreeChart 主要的類別程式庫 2.  jcommon-1.0.0-rc1.jar:提供 JFreeChart 底層操作所需要的各項類別 開啟NetBeans並建立一個新專案(NetBeans > File > New Project... >Gerenal >Java Application) 專案按右鍵 > Properties >Libraries > Add JAR/Folder > 選取以上兩個jar檔將之匯入即完成 之後再程式碼開頭只需導入所需的JFreeChart類別即可 (import org.jfree.chart.* ; 、 import org.jfree.data.general.DefaultPieDataset ;) Creating charts with JFreeChart is a three step process. You need to: • create a dataset containing the data to be displayed in the chart; • create a JFreeChart object that will be responsible for drawing the chart; • draw the chart to some output target (often, but not always, a panel on the screen);

BCB6 in win7

1.安裝好BCB6 2.裝好以後重新開機。啟動BCB6(註冊?),會出現找不到檔案的錯誤訊息。 3.關掉BCB6,到安裝目錄(C:\Program Files (x86)\Borland\CBuilder6)找到Bin資料夾,右鍵>內容>安全性> 編輯>群組或使用者名稱點選Users >把修改權限打開 。 4.Projects資料夾照第3點設定 上序步驟完成後即可在win7使用BCB6 .

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問題)

無網路傳輸設定

兩台電腦插入一條以跳接好的網路線並將DNS一下列方式設定 區域連線 >> 內容 TCP/IPv4 >> 使用下列的IP位子 >> 192.168 .0.X 另一端IP結尾設不同,完成後即成為同意網絡 ex: 主機端:192.168.0.11 ,客戶端:192.168.0.12

c++包opencv DLL C#使用

C++ 新增下方include並寫setpath與pshow兩方法。 前者為得到圖片位址並回傳指標,後者利用得到的指標去取得圖片位址並顯示圖片。 #include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> using namespace std; extern "C" _declspec(dllexport) IplImage* setpath(); _declspec(dllexport) IplImage* setpath() { IplImage *image = cvLoadImage("D:\\test.jpg" ,1); IplImage* output = image; return output; } extern "C" _declspec(dllexport) void pshow(IplImage *image); _declspec(dllexport) void pshow(IplImage *image) { cvNamedWindow("show" ,1 ); cvShowImage("show" , image); cvWaitKey(); } C#中要使用指標,需先至專案 >> 屬性 >> 建置 >> 勾選"容許Unsafe程式碼",在所要用的方法前加上unsafe即可

background (visual studio 2008)

圖片
程式功能:按下開始按鈕,label會從0開始增加,按下停止則會停在當前數值 step1. 開啟visual studio 2008建立一個window Form專案,在此以backgroundPro為方案名稱 (檔案 >> 新增 >> 專案  >>專案類型選擇 visual C# >>範本選擇 Window Form 應用程式) step2. 利用工具箱建立兩個button一個label與一個background (檢視 >>工具箱) step3. 將button1屬性中的Name改為Start,Text改為開始,button2的Name改為Stop,Text改為停止。 (此步驟可不做) step4. 在background的事件中,DoWork與RunWorkerCompleted點兩下增加程式碼,按鈕Click點兩下增加(亦可在按鈕上點兩下便會增加Click事件) 至此會自動產生四個事件程式碼 step5. 在background開始執行前,將 WorkerSupportsCancellation設定為true,才可呼叫CancelAsync。 在DoWork事件中跑回圈並顯示於label、RunWorkerCompleted事件中顯示結束訊息、Start_Click開始執行背景程式、Stop_Click停止背景程式 範例程式碼 namespace backgroundPro {     public partial class Form1 : Form     {         int a;         public Form1()         {             InitializeComponent();             backgroundWorker1.WorkerSupportsCancellation = true;             //將WorkerSupportsCancellation才可呼叫CancelAsync,否則會發生例外錯誤         }         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)