Tôi mới ở openCV vì thế phải vật lộn từ 3 đến 4 ngày qua, tôi đã phát hiện ranh giới tờ giấy, Bây giờ tôi muốn vẽ 4 vòng tròn trên các góc.Tìm góc của các giấy tờ
tôi vẽ ranh giới từ mã này
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);
Tôi mới trong OpenCV, Vì vậy, Theo tôi tôi có điểm góc trên bên trái p-> x và p-> y, Nhưng làm thế nào tôi có được các góc khác , Tôi cũng nhầm lẫn trong tham số & n trong phương pháp polylines này, cách phương pháp polylines này vẽ hình chữ nhật hoàn chỉnh?
Khi tôi sử dụng bounding rect, Nó không hoàn hảo nó cung cấp cho không gian nhỏ trên mặt của tờ giấy.
Bất kỳ sự giúp đỡ rất cám ơn sự
code is:
- (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);
////////////
}
Cảm ơn
Bạn có thể làm rõ cách bạn tìm thấy giấy không? Tối ưu bạn nên thêm mã. – dom
@moosgummi vui lòng kiểm tra chỉnh sửa của tôi, tôi nghĩ ở đây tôi sử dụng một số phần mã hóa của bạn từ câu hỏi của bạn, cảm ơn bạn đã chia sẻ phần đó. – QueueOverFlow