Używam otwartego CV, w IOS. Już wykryłem granicę arkusza papieru w obrazie jako obraz na zdjęciu i teraz muszę przeciągnąć tę linię graniczną na dotyk, aby dostosować ramkę przycięcia. jak możemy dostosować linię graniczną i jak możemy przyciąć obraz wewnątrz granicy?dostosuj rogi i przyciąć obraz openCV
Jest to możliwe w openCV lub używam OpenGL do tego?
@moosgummi: Wzywam metodę w sposób poniżej
- (cv::Mat)finshWork:(cv::Mat &)image
{
Mat img0 =image;
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);
// you could also reuse img1 here
Mat mask = Mat::zeros(img1.rows, img1.cols, CV_8UC1);
// CV_FILLED fills the connected components found
drawContours(mask, contours, -1, Scalar(255), CV_FILLED);
// let's create a new image now
Mat crop(img0.rows, img0.cols, CV_8UC3);
// set background to green
crop.setTo(Scalar(0,255,0));
// and copy the magic apple
img0.copyTo(crop, mask);
// normalize so imwrite(...)/imshow(...) shows the mask correctly!
normalize(mask.clone(), mask, 0.0, 255.0, CV_MINMAX, CV_8UC1);
std::vector<cv::Point> biggestContour = contours[contours.size()-1];
NSLog(@"%d",biggestContour[0].x);
NSLog(@"%d",biggestContour[0].y);
cv::Mat paperImage =[self getPaperAreaFromImage:image:biggestContour];
//return crop;
return paperImage;
}
Dzięki wszystkim
Jak utworzyć siatkę? Czy chciałbyś udostępnić przykładowy kod? Mam podobne pytania, zamieszczone tutaj: http://stackoverflow.com/questions/13269432/perspective-transform-crop-in-ios-with-opencv – mmackh
@Gryphon Jestem zainteresowany tym również. Jak stworzyłeś siatkę? – alandalusi
@Gryphon zobacz mój post http://stackoverflow.com/questions/13594391/ios-drawing-a-rectangle-on-an-imageview-and-adjusting-borders – alandalusi