看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) codeBlocks 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) OpenCV 問題(Question): 大家好: 目前利用opencv來學習影像處理以及辨識,試寫了一個調色盤程式來學習 但其中有兩點問題想要詢問大家,程式碼如下 #include <stdio.h> #include <stdlib.h> #include <highgui.h> #include <cv.h> char TrackBarNameB[]="B"; char TrackBarNameG[]="G"; char TrackBarNameR[]="R"; void onTrackBarB(int position); void onTrackBarG(int position); void onTrackBarR(int position); IplImage *Image1; int main() { cvNamedWindow("Show Image",0); CvSize Image1Size=cvSize(640,480); Image1=cvCreateImage(Image1Size,IPL_DEPTH_8U,3); // cvResizeWindow("Show Image",1024,768); cvCreateTrackbar(TrackBarNameB,"Show Image",0,255,onTrackBarB); cvCreateTrackbar(TrackBarNameG,"Show Image",0,255,onTrackBarG); cvCreateTrackbar(TrackBarNameR,"Show Image",0,255,onTrackBarR); cvWaitKey(0); cvDestroyAllWindows(); cvReleaseImage(&Image1); } void onTrackBarB(int position) { int i,j; for(i=0;i<Image1->height;i++) { for(j=0;j<Image1->widthStep;j=j+3) { Image1->imageData[i*Image1->widthStep+j]=position; } } cvShowImage("Show Image",Image1); } void onTrackBarG(int position) { int i,j; for(i=0;i<Image1->height;i++) { for(j=0;j<Image1->widthStep;j=j+3) { Image1->imageData[i*Image1->widthStep+j+1]=position; } } cvShowImage("Show Image",Image1); } void onTrackBarR(int position) { int i,j; for(i=0;i<Image1->height;i++) { for(j=0;j<Image1->widthStep;j=j+3) { Image1->imageData[i*Image1->widthStep+j+2]=position; } } cvShowImage("Show Image",Image1); } 第一個問題:void onTrackBarR(int position)、void onTrackBarG(int position)、 void onTrackBarB(int position) 這三個副程式內容物幾乎一樣,有辦法將這三個富城是結合在一起,變成呼叫一個副程式 即可以達到三原色數值擷取及顯示的功能嗎? 若能想詢問如何修改? 第二個問題:這個程式在調整影像尺寸的時候, 我以CvSize Image1Size=cvSize(640,480); 此函數來定義,但當我直接對此函數進行尺寸修改的時候 ,如CvSize Image1Size=cvSize(320,240);時,他仍然顯示640,480的尺寸,反而要透過 cvResizeWindow("Show Image",1024,768);才會進行變更,以確定有重新build,想請問 此點原因? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 190.115.177.249 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1429021866.A.3E6.html
TobyH4cker: 一、多加一個參數,B就傳0,G傳1,R傳2,你懂的 04/15 02:29
redonizuka: Thanks :)) 04/15 04:19
後來遇到一個問題,在主程式內cvCreateTrackbar(..onTrackBarR)參數內 我onTrackBarR並沒有給予參數,因此若多加一個參數進去要進行判斷的話 會導致我也需要給予int position 一個質,但若給予值則就會出現錯誤了 ※ 編輯: redonizuka (190.115.177.249), 04/15/2015 04:51:37
VSei: typedef void (CV_CDECL *CvTrackbarCallback)(int pos); 04/15 09:51
VSei: 所以應該不能多加一個參數吧? 04/15 09:52
VSei: 2.的問題可以在cvCreateImage直接先上一行cvShowImage 04/15 09:54
VSei: 可能是沒有showImage的動作windows沒有帶入參數更新 04/15 09:56
VSei: 另外建議可以在cvCreateTrackbar前先將整張圖片都寫入0 04/15 09:57
VSei: 起始畫面有初值才會顯示正常 04/15 09:59
TobyH4cker: 原來那個是事件喔,我沒寫過CV不知道 04/15 10:12
VSei: http://codepad.org/rgnfqgf0 04/15 10:20
感謝各位的幫忙與討論,看來第一個問題有點無解的樣子 ※ 編輯: redonizuka (190.115.183.169), 04/16/2015 01:34:48
TobyH4cker: 硬要的話就global variable了,執行一行 cvCreateTrac 04/16 01:47
TobyH4cker: kbar就遞增 04/16 01:48