würde Ich mag einen Teil des Bildes mit meinem Bild in OpenCVOverlay kleineres Bild in einem größeren Bild in OpenCV
I
verwendetcvGetPerspectiveMatrix() with a warpmatrix and using cvAnd() and cvOr()
ersetzen kann aber nicht die Arbeit zu
Dies ist der Code, der derzeit das Bild und ein weißes Polygon für das Ersatzbild anzeigt. Ich möchte das weiße Polygon für ein Bild durch eine beliebige Dimension ersetzen, die skaliert und durch die Region ersetzt werden soll.
Während der Code in javacv ist, könnte ich es Java umwandeln, auch wenn C-Code
grabber.start();
while(isDisp() && (image=grabber.grab())!=null){
if (dst_corners != null) {// corners of the image to be replaced
CvPoint points = new CvPoint((byte) 0,dst_corners,0,dst_corners.length);
cvFillConvexPoly(image,points, 4, CvScalar.WHITE, 1, 0);//white polygon covering the replacement image
}
correspondFrame.showImage(image);
}
Alle Zeiger auf diese wird sehr hilfreich gebucht wird.
Update:
I verwendet warpmatrix mit diesem Code und ich bekomme einen schwarzen Fleck für das Overlay-Bild
cvSetImageROI(image, cvRect(x1,y1, overlay.width(), overlay.height()));
CvPoint2D32f p = new CvPoint2D32f(4);
CvPoint2D32f q = new CvPoint2D32f(4);
q.position(0).x(0);
q.position(0).y(0);
q.position(1).x((float) overlay.width());
q.position(1).y(0);
q.position(2).x((float) overlay.width());
q.position(2).y((float) overlay.height());
q.position(3).x(0);
q.position(3).y((float) overlay.height());
p.position(0).x((int)Math.round(dst_corners[0]);
p.position(0).y((int)Math.round(dst_corners[1]));
p.position(1).x((int)Math.round(dst_corners[2]));
p.position(1).y((int)Math.round(dst_corners[3]));
p.position(3).x((int)Math.round(dst_corners[4]));
p.position(3).y((int)Math.round(dst_corners[5]));
p.position(2).x((int)Math.round(dst_corners[6]));
p.position(2).y((int)Math.round(dst_corners[7]));
cvGetPerspectiveTransform(q, p, warp_matrix);
cvWarpPerspective(overlay, image, warp_matrix);
ich einen schwarzen Fleck für das Overlay-Bild zu bekommen und auch wenn das Originalbild eines Polygon mit 4 Scheitelpunkten wird das Overlay-Bild als Rechteck gesetzt. Ich glaube, das liegt am ROI. Könnte mir bitte jemand sagen, wie man das Bild so anpasst wie es ist und auch warum ich einen schwarzen Fleck anstelle des Overlay-Bildes bekomme.
Ist Ihr Polygon-Achse ausgerichtet ist (genauer gesagt, Rechteck)? – cxyzs7
Es ist kein Rechteck und es ist nicht Achse ausgerichtet, aber es hat nur 4 Ecken. –