2012-10-11 124 views
2

我試圖從VC++和OpenCV的圖像獲得ROI。 我設法顯示圖像,點擊它時獲取點的座標,將這些座標存儲在矢量中,並在圖像上這些點之間畫線。 這裏是我的代碼:如何從OpenCV獲得點的輪廓

//Includes 
#include <iostream> 
#include <cstdio> 
#include <cstdlib> 
#include <stdio.h> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 

using namespace std; 
using namespace cv; 

static int app; 
static vector<Point2f> cont(6); 
static Mat img = imread("C:/img.jpg",0); 

void on_mouse(int, int, int, int, void*); 

int main() 

{ 
app = 0; 
namedWindow("myWindow", CV_WINDOW_AUTOSIZE); 
cvSetMouseCallback("myWindow", on_mouse, 0); 
imshow("myWindow", img); 
waitKey(0); 
} 

void on_mouse(int evt, int x, int y, int flags, void* param) 
{ 

if(evt == CV_EVENT_LBUTTONDOWN) 
{ 
    Point pt(x,y); 
    if(app<6) 
     { 
      cont[app]=pt; 
      app++; 
     } 


    cout<<"Coordonnees du point pt : "<<x<<","<<y<<endl; 
    for (int i=0; i<6;i++) 
    {cout<<cont[i]<<endl;} 
} 
if(evt == CV_EVENT_RBUTTONDOWN) 
{ 
    for (int j=0;j<5;j++) 
     { 
      line(img,cont[(j)],cont[(j+1)],CV_RGB(255,0,0),2); 
     } 
    line(img,cont[(5)],cont[(0)],CV_RGB(255,0,0),2); 
    imshow("myWindow", img); 

    } 
} 

我想獲得的是包含輪廓的所有點的座標,並最終bianary矩陣我的形象,它包含0,如果像素大小的矢量不在輪廓,其他1. 感謝您的幫助。

+0

用'的contour'的所有點的座標,什麼是你的目標是什麼?爲什麼你需要他們,因爲你有所有的角點和所有其他的點線? –

回答

1

製作單個元素vector< vector< Point> >,然後在CV_FILLED中使用drawContours。然後你會得到你想要的二元矩陣。

我目前沒有IDE,但代碼會像下面

vector< vector< Point> > contours; 
contours.push_back(cont);//your cont 
Mat output(img.rows,img.cols,CV_8UC1);//your img 
drawContours(output, contours, 0, Scalar(1), CV_FILLED);//now you have binary image 
+0

謝謝托馬斯,這似乎正是我需要的,但我可以讓它工作。 等高線(在你的例子中)是一個點數組? 我讀過OpenCV文檔,參數輪廓必須是CvSeq *類型,但我不知道如何從我的數組中創建這樣一個對象 – alvinleetya