我是openCV中的新人,因此最近3到4天都在努力工作,我已經檢測到紙張邊界,現在我想在角落畫出4個圓圈。查找論文的角落
我從這個代碼繪製邊界
const cv::Point* p = &squares[i][0];
int n = (int)squares[i].size();
polylines(image, &p,&n, 1, true, Scalar(255,255,0), 5, CV_AA);
我在OpenCV的是新的,所以在我看來我得左上角點P-> x和P-> Y,但我怎麼讓別人角落,我也在參數& n中混淆了這個多義線方法,這個多義線方法如何繪製完整的矩形?
當我使用邊界矩形,它不是完美的,它給紙面上的一點空間。
任何幫助,非常感謝
代碼:
- (cv::Mat)finshWork:(cv::Mat &)image
{
// read in the apple (change path to the file)
Mat img0 =image;// imread("/home/philipp/img/apple.jpg", 1);
Mat img1;
cvtColor(img0, img1, CV_RGB2GRAY);
// apply your filter
Canny(img1, img1, 100, 200);
// find the contours
vector< vector<cv::Point> > contours;
findContours(img1, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
/////for SQUARE CODE
std::vector<std::vector<cv::Point> > squares;
std::vector<cv::Point> approx;
for(size_t i = 0; i < contours.size(); i++)
{
cv::approxPolyDP(cv::Mat(contours[i]), approx, arcLength(cv::Mat(contours[i]), true)*0.02, true);
if(approx.size() == 4 && fabs(contourArea(cv::Mat(approx))) > 1000 && cv::isContourConvex(cv::Mat(approx))) {
double maxCosine = 0;
for(int j = 2; j < 5; j++)
{
double cosine = fabs(angle(approx[j%4], approx[j-2], approx[j-1]));
maxCosine = MAX(maxCosine, cosine);
}
if(maxCosine < 0.3) {
squares.push_back(approx);
cv::Point newPoint = approx[0];
NSLog(@"x is %d and y is %d",newPoint.x,newPoint.y);
}
}
}
const cv::Point* p = &squares[0][0];
int n = (int)squares[0].size();
NSLog(@"%d",n);
//THIS IS WORKING CODE
polylines(image, &p,&n, 1, true, Scalar(0,0,255), 10, CV_AA);
//polylines(image, &p,&n, 1, true, Scalar(255,255,0), 5, CV_AA);
////////////
}
感謝
你能澄清你如何找到這份報紙嗎?最好你應該添加更多的代碼。 – dom
@moosgummi請檢查我的編輯,我想在這裏我使用你的問題的一部分編碼,感謝分享這部分。 – QueueOverFlow