我已經使用OpenCV編寫了一個C++程序,可以檢測並突出顯示實況視頻中任何對象的邊緣。但是現在我不知道如何從視頻中檢測到的許多邊緣提取立方體的四角。所以我在這裏尋找一些幫助。使用Opencv讀取魔方的顏色
以下是我用作此項目指南的論文鏈接。 http://www.cs.ubc.ca/~andrejk/525project/525report.pdf 您可以在下面的鏈接中找到本文的程序代碼。它是用Python編寫的。 (我正在使用C++,我不知道Python) http://www.cs.ubc.ca/~andrejk/525project/cubefinder.py
根據論文,下一步將是'具有自適應閾值的邊緣分割'。 我真的不明白。而且我也不知道如何提取立方體的角落。
我使用的方法的簡短摘要如下。 1.網絡攝像頭輸入 2.應用拉普拉斯濾波器 3.應用霍夫線變換。
我收到以下結果。
代碼
using namespace std;
using namespace cv;
Mat laplacianFilter(Mat image)
{
Mat hImage;
GaussianBlur(image,hImage,Size(3,3),0,0,BORDER_DEFAULT);
cvtColor(hImage,hImage,CV_RGB2GRAY);
Laplacian(hImage,hImage,CV_16SC1,3,1,0,BORDER_DEFAULT);
convertScaleAbs(hImage,hImage,1,0);
return hImage;
}
Mat hghTransform(Mat image, Mat &image2)
{
Mat lImage;
Canny(image,image,50,200,3);
cvtColor(image,lImage,CV_GRAY2BGR);
vector<Vec4i> lines;
HoughLinesP(image, lines, 1, CV_PI/180, 50, 50, 10);
for(size_t i = 0; i < lines.size(); i++)
{
Vec4i l = lines[i];
line(image2, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,255,0), 3, CV_AA);
}
return lImage;
}
int main()
{
int c;
VideoCapture cap(0);
Mat image;
Mat image2;
namedWindow("hghtransform");
namedWindow("laplacianfilter");
namedWindow("cannyOutput");
while(1)
{
cap>>image;
cap>>image2;
//Output
imshow("laplacianfilter",laplacianFilter(image));
imshow("cannyOutput",hghTransform(laplacianFilter(image),image2));
imshow("hghtransform",image2);
c=waitKey(33);
if(c==27)
return 0;
}
return 0;
}
Python與C++非常相似,所以我猜你應該沒問題。如果有的話,這簡單得多。它使用縮進而不是'{}'。這可能是真正重要的一切。 – 2014-08-29 08:06:50