2016-04-01 48 views
6

enter image description hereopencv einen Teil des Bildes innerhalb Kontur beschneiden

Ich habe gerade erst begonnen OpenCV lernen. Ich wollte einen Teil eines Bildes zuschneiden, bei dem es sich um einen Text handelt, der von einem roten Kreis umgeben ist. können Sie mir helfen, die Lösung zu finden, wie sind alle Methoden, die ich folgen sollte, um es zu schneiden. Ich habe einige Dinge ausprobiert und den roten Kreis beschnitten und auf einer Matte gelagert.

while(1) 
    { 
     capture>>img0; 
     imshow("original", img0); 
     imwrite("original.jpg", img0); 
     cv::inRange(img0,cv::Scalar(0,0,100),cv::Scalar(76,85,255),img1); 
     imshow("threshold.jpg", img1); 
     imwrite("threshold.jpg", img1); 
     // find the contours 
     vector< vector<Point> > contours; 
     findContours(img1, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); 

     Mat mask = Mat::zeros(img1.rows, img1.cols, CV_8UC1); 

     drawContours(mask, contours, -1, Scalar(255), CV_FILLED); 

     Mat crop(img0.rows, img0.cols, CV_8UC3); 

     crop.setTo(Scalar(255,255,255)); 

     img0.copyTo(crop, mask); 

     normalize(mask.clone(), mask, 0.0, 255.0, CV_MINMAX, CV_8UC3); 

     imshow("mask", mask); 
     imshow("cropped", crop); 

     imwrite("mask.jpg", mask); 
     imwrite("cropped.jpg", crop); 

     if(waitKey(30)=='27') 
     { 
      break; 
     } 
    } 
    return 0;`[original image[cropped image][1]` 

Von diesem Bild wollte ich einen Text allein zuschneiden. hilf mir, die Lösung zu finden, indem du mir die Methoden oder Schritte mitteilst, denen du folgen musst.

Vielen Dank im Voraus

+0

so was ist Ihre Frage? weil es scheint, du schaffst es, es zu tun * "Ich habe einige Dinge ausprobiert und den roten Kreis beschnitten und in einer Matte gespeichert." * – lmiguelmh

+0

Ich wollte Text allein croppen –

+0

Ich denke, du musst ein Beispielbild einfügen Ihre Frage klar – lmiguelmh

Antwort

2

Wenn Sie allein den Text zu extrahieren, können Sie dies versuchen: -

drawContours(mask, contours, -1, Scalar(255), CV_FILLED); 
vector<Rect> boundRect(contours.size()); 
for(int i=0;i<contours.size();i++) 
    { 
     boundRect[i] = boundingRect(contours[i]);//enclose in Rect 
     Mat ROI,ROI_txt; 
     if(boundRect[i].width>30 && boundRect[i].height>30)//ignore noise rects 
     { 
      ROI=img0(boundRect[i]);//extract Red circle on ROI 
      inRange(ROI,Scalar(0,0,0),cv::Scalar(50,50,50),ROI_txt); 
      //black colour threshold to extract black text 
     } 
    } 
+0

Danke für Ihre Art Replay .. Ich werde versuchen, dies zu überprüfen. –

+0

Danke Saransh .. es hat gut funktioniert –

Verwandte Themen