2014-01-08 33 views
0

我有一個形象,我想通過展示和imshow()更新在運行時:說我想在這同一運行角點檢測算法,然後顯示角落圖像 - 像在MATLAB figure plot(), hold plot() - hold關鍵字保存上一個圖像/圖形,並啓用一個新的情節在同一個圖。保持運行時更新映像中的OpenCV

這可能與OpenCV有關嗎?如果是,我該怎麼辦?

謝謝

+2

在操作圖像數據後再次調用'imshow'(同一窗口,同一圖像)。在imshow之後不要忘記一些'cv :: waitKey()',否則可能沒有足夠的時間顯示圖像或沒有足夠的時間讓用戶查看更改。 – Micka

回答

4

在C++中,您無需爲了更新繪圖而持有它。你只需要繪製你想要的圖像,然後imshow圖像。你走了。


請看下面的例子從here

int Displaying_Big_End(Mat image, char* window_name, RNG rng) 
{ 
    Size textsize = getTextSize("OpenCV forever!", CV_FONT_HERSHEY_COMPLEX, 3, 5, 0); 
    Point org((window_width - textsize.width)/2, (window_height - textsize.height)/2); 
    int lineType = 8; 

    Mat image2; 

    for(int i = 0; i < 255; i += 2) 
    { 
    image2 = image - Scalar::all(i); 
    putText(image2, "OpenCV forever!", org, CV_FONT_HERSHEY_COMPLEX, 3, 
      Scalar(i, i, 255), 5, lineType); 

    imshow(window_name, image2); 
    if(waitKey(DELAY) >= 0) 
     { return -1; } 
    } 

    return 0; 
} 

enter image description here

,請注意imshow(window_name, image2),我們沒有做任何事情來保存圖像,只使用循環繪製在圖像上遞增(由putText())。圖像將相應地動態更新。

+2

非常可愛的樣品! – berak

+0

@herohuyongtao謝謝你的回答!就我所瞭解的你而言,你會在最後添加所有文本框的時候看到**最終圖像**。你不會看到**中間結果**。含義:結果**之前**你添加一個文本框和**之後**你添加一個文本框 - 這是我所需要的:查看圖像之前添加一個功能和添加功能後。 – PhonoDots

+0

@PhonoDots你會看到圖像如何隨時間變化。 – herohuyongtao

2

在OpenCV中沒有hold的概念。
基本上,cv::imshow()只會更新窗口,不管它是什麼圖片它得到。爲了「覆蓋」,您實際上需要創建新圖像(或重新使用現有圖像),繪製這個新圖像和/或更新它,例如,與您檢測到的角落,並再次與此更新的圖像imshow()