मैं ओपनसीवी में नया हूं इसलिए पिछले 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-> एक्स और p-> y है, लेकिन यह कैसे मैं दूसरों कोनों मिल , मैं इस पॉलीलाइन विधि में पैरामीटर & एन में भी उलझन में हूं, यह पॉलिलाइन विधि पूरी आयताकार कैसे आकर्षित करती है?
जब मैं बाउंडिंग रेक्ट का उपयोग करता हूं, तो यह सही नहीं है कि यह पेपर शीट के पक्ष में थोड़ी सी जगह देता है।
किसी भी मदद वास्तव में सराहना की
कोड है:
- (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