2012-09-07 38 views
5

là có thể vẽ các đường lưới do người dùng xác định với các điểm được xác định tại tất cả các nút giao, so với đầu ra của mẫu phát hiện màu trong tệp mẫu opencv không? Về cơ bản, webcam sẽ cần phải phát hiện đầu và vai của con người từ phía trên bạn. Sau đó, khi một người được phát hiện, tôi cần các đường lưới ở đó để tôi có thể biết từ lưới ngoài cùng (vai trái), tới lưới ngoài cùng bên ngoài (vai phải), ở cả trục x và trục y (trán và Mặt sau của đầu). Sau đó, những điểm này phải được gửi cho hoạt động của các bộ phận cơ khí như thiết bị truyền động và van.Vẽ các đường lưới cố định với opencv

Tôi thực sự sẽ đánh giá cao bất kỳ trợ giúp nào, hiện tại tôi thực sự tuyệt vọng ..

Thx!

Tôi là người dùng cấp opencv cấp cao, chỉ với kiến ​​thức mới bắt đầu về làm việc với C++. Tôi hiện đang sử dụng opencvV2.1, trên VS2008.

Trả lời

3

Rất khó để biết vấn đề của bạn thực sự là gì.

Nếu bạn chỉ muốn vẽ đường lưới, không có hàm opencv nào thực hiện điều đó. Để vẽ các đường trong lưới, bạn có thể sử dụng cv::line trong một vòng lặp, sau đó vẽ các nút giao với vòng lặp lồng nhau.

// assume that mat.type=CV_8UC3 

dist=50; 

int width=mat.size().width; 
int height=mat.size().height; 

for(int i=0;i<height;i+=dist) 
    cv::line(mat,Point(0,i),Point(width,i),cv::Scalar(255,255,255)); 

for(int i=0;i<width;i+=dist) 
    cv::line(mat,Point(i,0),Point(i,height),cv::Scalar(255,255,255)); 

for(int i=0;i<width;i+=dist) 
    for(int j=0;j<height;j+=dist) 
    mat.at<cv::Vec3b>(i,j)=cv::Scalar(10,10,10); 
0

Đối vẽ một lưới trên hình ảnh sử dụng chức năng dòng OpenCV

Mat mat_img(image); 
int stepSize = 65; 

int width = mat_img.size().width; 
int height = mat_img.size().height; 

for (int i = 0; i<height; i += stepSize) 
    cv::line(mat_img, Point(0, i), Point(width, i), cv::Scalar(0, 255, 255)); 

for (int i = 0; i<width; i += stepsSize) 
    cv::line(mat_img, Point(i, 0), Point(i, height), cv::Scalar(255, 0, 255));