Das Verfahren für ein beliebiges Viereck Zuschneiden (oder ein Polygon für diese Angelegenheit) Teil eines Bildes wird uns als summierten:
- Erzeugen Sie eine „Maske“. Die Maske ist schwarz, wo Sie das Bild behalten möchten, und weiß, wo Sie nicht wollen, es zu halten
- Berechne die „bitwise_and“ zwischen dem Eingangsbild und dem Masken
Also, Sie können davon ausgehen müssen, ein Bild. In diesem Zusammenhang verwende ich zur Vereinfachung eine Bildgröße von 30 x 30, die Sie je nach Anwendungsfall ändern können.
cv::Mat source_image = cv::imread("filename.txt");
Und Sie haben vier Punkte, die Sie als die Ecken verwenden möchten:
cv::Point corners[1][4];
corners[0][0] = Point(10, 10);
corners[0][1] = Point(20, 20);
corners[0][2] = Point(30, 10);
corners[0][3] = Point(20, 10);
const Point* corner_list[1] = { corners[0] };
können Sie die Funktion verwenden cv::fillPoly
auf einer Maske diese Form zu zeichnen:
int num_points = 4;
int num_polygons = 1;
int line_type = 8;
cv::Mat mask(30,30,CV_8UC3, cv::Scalar(0,0,0));
cv::fillPoly(mask, corner_list, &num_points, num_polygons, cv::Scalar(255, 255, 255), line_type);
Dann einfach berechnen den bitwise_and des Bildes und Maske:
cv::Mat result;
cv::bitwise_and(source_image, mask, result);
result
hat jetzt das beschnittene Bild in ihm. Wenn Sie die Kanten am Ende weiß statt schwarz wünschen könnte man stattdessen tun:
cv::Mat result_white(30,30,CV_8UC3, cv::Scalar(255,255,255));
cv::bitwise_and(source_image, mask, result_white, mask);
In diesem Fall sind wir nur bitwise_and
‚s Maske Parameter verwenden, um den bitwise_and in der Maske zu tun. Weitere Informationen und Links zu allen genannten Funktionen finden Sie unter this tutorial.
Wie Sie auf die Region entscheiden wollen, zu beschneiden? Willst du die Ernte, die du gezeigt hast, immer blind machen? Oder willst du die ganze Zeit eine Raute? Im Allgemeinen können Sie die bitwise_and -Funktion von OpenCV verwenden, um einen Teil des Bildes zu maskieren, aber das Erzeugen der Maske erfordert mehr Details. –
die Region wäre keine Konstante meine ich es in irgendeiner Form sein würde, aber immer hat es vier Ecken –