OpenCV 的 cvNamedWindow 是否可以不要用? |
|
MyBCB
一般會員 發表:4 回覆:7 積分:2 註冊:2006-07-16 發送簡訊給我 |
|
PcGrek
一般會員 發表:1 回覆:4 積分:1 註冊:2005-10-11 發送簡訊給我 |
可以到 yahoo 的 OpenCV 討論區
tech.groups.yahoo.com/group/OpenCV/ 有一個function 可以把 IplImage 轉 Bitmap,如下: <textarea class="cpp" rows="10" cols="60" name="code">//////////////////////////////////////////////////////////////////////////// // - the IplImage "src" Image must have a IPL_DEPTH_8U depth // // and 1 or 3 channels // // - the convertion is done in regards to the ROI if it is set // // - if you want to stretch your TBitmap ,specify width and height before // // calling the function // //////////////////////////////////////////////////////////////////////////// bool __fastcall IplImageToTBitmap (const IplImage *src,Graphics::TBitmap *dest) { if (!src || !dest) return false; IplImage *temp; CvRect roi; if (src->roi) roi=cvGetImageROI(src); else roi=cvRect(0,0,src->width,src->height); temp=cvCreateImage(cvSize(roi.width,roi.height),IPL_DEPTH_8U,3); if (src->nChannels!=3) cvCvtColor(src,temp,CV_GRAY2RGB); else cvCopy(src,temp); if (dest->Width==0 || dest->Height==0) { dest->Width = roi.width; dest->Height = roi.height; } else { IplImage *temp1=cvCloneImage(temp); cvReleaseImageData(temp); cvInitImageHeader(temp,cvSize(dest->Width,dest->Height),IPL_DEPTH_8U,3,src>origin,4); cvCreateImageData(temp); roi.width=dest->Width; roi.height=dest->Height; cvResize(temp1,temp); cvReleaseImage(&temp1); } dest->PixelFormat=pf24bit; try { unsigned char *pLine; int x,y; for(y=0 ;y ps. 有設定style 是 code 了,還是沒有縮排…orz |
MyBCB
一般會員 發表:4 回覆:7 積分:2 註冊:2006-07-16 發送簡訊給我 |
參考這個 function
Graphics::TBitmap *CapImg1 = new Graphics::TBitmap(); IplImageToTBitmap (img,CapImg1); Form1->Image1->Picture->Bitmap->Assign(CapImg1); delete CapImg1; 並把原本的 cvNamedWindow( "result", 1 ); 去掉 Image1 裡面都沒有顯示任何東西; 但是如果保留 cvNamedWindow( "result", 1 ); Image1 裡面就會同步顯示 result 視窗的東西, 現在問題解決一半, 但是還是要有cvNamedWindow才行 還有辦法改善嗎? |
PcGrek
一般會員 發表:1 回覆:4 積分:1 註冊:2005-10-11 發送簡訊給我 |
|
MyBCB
一般會員 發表:4 回覆:7 積分:2 註冊:2006-07-16 發送簡訊給我 |
|
miaoweiwei
一般會員 發表:1 回覆:2 積分:0 註冊:2007-06-22 發送簡訊給我 |
不好意思~我也發生同樣的問題!一定要SHOW WINDOW才能SHOW到BCB的IMAGE上
而且通常我一把WINDOW關掉程式就會沒有回應~ 感覺是無窮迴圈的問題!懇請高手指點! 以下是我部分CODE~ [code cpp] CvCapture* capture = 0; IplImage *frame, *frame_copy = 0; String cascade_name = Edit3->Text; cascade= (CvHaarClassifierCascade*)cvLoad( cascade_name.c_str()/*,0,0,0 */); storage = cvCreateMemStorage(0); capture = cvCaptureFromCAM(0); cvNamedWindow( "face",1);//去掉此行程式執行時會無法回應 if( capture ) { for(;;) { // Capture the frame and load it in IplImage if( !cvGrabFrame( capture )) break; frame = cvRetrieveFrame( capture ); if( !frame ) break; if( !frame_copy ) frame_copy = cvCreateImage( cvSize(320,240), IPL_DEPTH_8U, 3 ); // Check the origin of image. If top left, copy the image frame to frame_copy if( frame->origin == IPL_ORIGIN_TL ) cvCopy( frame, frame_copy, 0 ); // Else flip and copy the image else cvFlip( frame, frame_copy, 0 ); New_detect_and_draw( frame_copy ); Graphics::TBitmap *CapImg1 = new Graphics::TBitmap(); IplImageToTBitmap (frame_copy,CapImg1); Image4->Picture->Bitmap->Assign(CapImg1); Image4->Refresh(); delete CapImg1; //cvShowImage( "face", frame ); // Wait for a while before proceeding to the next frame if( cvWaitKey( 10 ) >= 0 ) break; } cvReleaseImage( &frame_copy ); cvReleaseCapture( &capture ); cvReleaseHaarClassifierCascade( &cascade ); } // Destroy the window previously created with filename: "result" cvDestroyWindow("face"); [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |