Wasserzeichen mit opencv @ aus einem Bild entfern
Zunächst habe ich dieses Bild und möchte eine Anwendung erstellen, die ähnliche Bilder erkennt und den Kreis (Wasserzeichen) daraus entfernt.
int main(){
Mat im1,im2,im3,gray,gray2,result;
im2=imread(" (2).jpg");
namedWindow("x",CV_WINDOW_FREERATIO);
imshow("x",im2);
//converting it to gray
cvtColor(im2,gray,CV_BGR2GRAY);
// creating a new image that will have the cropped ellipse
Mat ElipseImg(im2.rows,im2.cols,CV_8UC1,Scalar(0,0,0));
//detecting the largest circle
GaussianBlur(gray,gray,Size(5,5),0);
vector<Vec3f> circles;
HoughCircles(gray,circles,CV_HOUGH_GRADIENT,1,gray.rows/8,100,100,100,0);
uchar x;
int measure=0;int id=0;
for(int i=0;i<circles.size();i++){
if(cvRound(circles[i][2])>measure && cvRound(circles[i][2])<1000){
measure=cvRound(circles[i][2]);
id=i;
}
}
Point center(cvRound(circles[id][0]),cvRound(circles[id][1]));
int radius=cvRound(circles[id][2]);
circle(im2,center,3,Scalar(0,255,0),-1,8,0);
circle(im2,center,radius,Scalar(0,255,0),2,8,0);
ellipse(ElipseImg,center,Size(radius,radius),0,0,360,Scalar(255,255,255),-1,8);
cout<<"center: "<<center<<" radius: "<<radius<<endl;
Mat res;
bitwise_and(gray,ElipseImg,result);
namedWindow("bitwise and",CV_WINDOW_FREERATIO);
imshow("bitwise and",result);
// trying to estimate the Intensity of the circle for the thresholding
x=result.at<uchar>(cvRound(circles[id][0]+30),cvRound(circles[id][1]));
cout<<(int)x;
//thresholding the output image
threshold(ElipseImg,ElipseImg,(int)x-10,250,CV_THRESH_BINARY);
namedWindow("threshold",CV_WINDOW_FREERATIO);
imshow("threshold",ElipseImg);
// making bitwise_or
bitwise_or(gray,ElipseImg,res);
namedWindow("bitwise or",CV_WINDOW_FREERATIO);
imshow("bitwise or",res);
waitKey(0);
}
So weit was ich gemacht habe ist:
Ich konvertiere es in GraustufenIch erkenne den größten Kreis mit Hilfe von Hough-Kreisen und erstelle dann einen Kreis mit demselben Radius in einem neuen BildDieser neue Kreis mit dem Graustufenkreis mitbitwise_and
) gib mir ein Bild mit nur diesem Kreis Threshold das neue Bildbitwise_or
das Ergebnis der SchwelleMein Problem ist, dass kein schwarzer Text auf der gekrümmten weißen Linie in diesem Kreis angezeigt wurde. Ich habe versucht, die Farbe mithilfe der Pixelwerte anstelle des Schwellenwerts zu entfernen, aber das Problem ist das gleiche. Gibt es also Lösungen oder Vorschläge?