2013-05-18 51 views
0

我對OpenCV(C++)非常陌生,我的講師要求我製作一個簡單的滑塊,使滑塊中的每個位置在窗口中都有不同的位置。我的下面的代碼可以基於滑塊位置移動窗口中的對象,但是當我移動滑塊時舊的位置仍然存在。所以它看起來像一個重複的不動。任何人都可以幫助我解決這個問題?有沒有辦法解決這個問題,或者我必須完全改變代碼?使用滑塊移動對象openCV C++

#include "stdafx.h" 
#include "cv.h" 
#include "ml.h" 
#include "cxcore.h" 
#include "highgui.h" 


int g_switch_value = 0; 
int colorInt = 0; 

void switch_callback(int position){ 
    if(position == 0){ 
     colorInt = 0; 
    }else{ 
     colorInt = 1; 
    } 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
const char* name = "Change the color of circle in the picture"; 
int radius = 30; 
int thickness = 12; 
int connectivity = 8; 
cvscalar red = cv_RGB(0,0,255); 

IplImage* src1 = cvLoadImage("E:/2.jpg"); 

CvPoint pt1 = cvPoint(405,195); 
CvPoint pt2 = cvPoint(620,400); 

cvNamedWindow(name, 1); 
cvShowImage(name, src1); 

cvCreateTrackbar("Change", name, &g_switch_value, 1, switch_callback); 

while(1) { 
    if(colorInt == 0) { 
     cvCircle(src1,pt1,radius,red,thickness,connectivity);} 
    else { 
     cvCircle(src1,pt2,radius,red,thickness,connectivity); } 
     colorInt == 1; 
     cvShowImage(name, src1); 
    if(cvWaitKey(15) == 27) break; 
} 
cvReleaseImage(&src1); 
cvDestroyWindow(name); 

return 0; } 
+0

當您移動的TrackBar它創建在正確位置的新圈子,而且還使舊的你是什麼意思?是否可能是您每次移動軌跡條時都要創建一個新的圓形,但是您還需要通過更改其顏色來刪除舊的圓形?我不確定 – anana

回答

0

圖形覆蓋圖像,然後你應該爲每個不同的繪畫保留一個新的副本。 更簡單的方法:

IplImage* src1 = cvLoadImage("..."); 
IplImage* src2 = cvLoadImage("..."); 
... 

while(1) { 
    if(colorInt == 0) { 
     cvShowImage(name, src1); 
     cvCircle(src1,pt1,radius,red,thickness,connectivity); 
    } 
    else { 
     cvShowImage(name, src2); 
     cvCircle(src2,pt2,radius,red,thickness,connectivity); 
    } 
    if(cvWaitKey(15) == 27) break; 
} 
cvReleaseImage(&src1); 
cvReleaseImage(&src2);