如何编辑此方法以使用javacv绘制多边形?
在stackoverflow中,我浏览了许多图章和一堆问题,发现了以下用于绘制矩形的方法如何编辑此方法以使用javacv绘制多边形?,java,image-processing,javacv,Java,Image Processing,Javacv,在stackoverflow中,我浏览了许多图章和一堆问题,发现了以下用于绘制矩形的方法 public static void drawSquares( IplImage image, final CvSeq squares ) { if(!squares.isNull()){ CvSeq p = new CvSeq(squares.total()); cvCvtSeqToArray(squares, p, CV_WHOLE_SEQ);
public static void drawSquares( IplImage image, final CvSeq squares )
{
if(!squares.isNull()){
CvSeq p = new CvSeq(squares.total());
cvCvtSeqToArray(squares, p, CV_WHOLE_SEQ);
System.out.println(squares.total());
for(int i = 0; i < squares.total(); i ++ )
{
CvPoint pts = new CvPoint(4);
cvCvtSeqToArray(p.position(i), pts, CV_WHOLE_SEQ);
// //cvBoundingRect(image, i);
int npt[] = {4, 4};
// //DrawLine() reference http://opencv.willowgarage.com/documentation/cpp/drawing_functions.html#cv-line
cvDrawLine(image, new CvPoint(pts.position(0).x(),pts.position(0).y()), new CvPoint(pts.position(1).x(),pts.position(1).y()), CvScalar.GREEN, 3, CV_AA, 0);
cvDrawLine(image, new CvPoint(pts.position(1).x(),pts.position(1).y()), new CvPoint(pts.position(2).x(),pts.position(2).y()), CvScalar.GREEN, 3, CV_AA, 0);
cvDrawLine(image, new CvPoint(pts.position(2).x(),pts.position(2).y()), new CvPoint(pts.position(3).x(),pts.position(3).y()), CvScalar.GREEN, 3, CV_AA, 0);
cvDrawLine(image, new CvPoint(pts.position(3).x(),pts.position(3).y()), new CvPoint(pts.position(0).x(),pts.position(0).y()), CvScalar.GREEN, 3, CV_AA, 0);
}
}
final CanvasFrame canvas = new CanvasFrame(wndname);
canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
canvas.showImage(image);
}
请有人解释一下它为什么不运行,以及我的methid有什么问题?您需要做的第一件事是将问题域简化为一个简单的可重复案例。确定导致崩溃的多边形形状。您可以查看opencv的C/C++源代码,看看它没有执行哪些检查,例如它是否允许屏幕外像素 您可以更进一步,编写一个包装类来执行一系列检查并记录每个函数调用,这样您就可以准确地知道错误发生的时间、错误是否每次都发生在同一个地方以及导致错误的事件序列
或者,您可以测试传递到
drawPoly
的点,方法是暂时调用drawPoly
调用drawSquare
,首先发送点0-3,然后发送点4-7,以验证发送的点没有触发问题的事实。您是否可以发布一个复制您的问题的日志?否则,“hs_err_pid5992.log”的内容可能会对您的drawSquares方法起作用了吗?您还可以提供找到它的stackoverflow链接吗?它在错误消息中说,这个异常是在Java虚拟机之外抛出的。这是Java包装的C代码引发的某种异常。另外:请发布hs_err_pid.log
public static void drawPoly( IplImage image, final CvSeq poly )
{
if(!poly.isNull()){
CvSeq p = new CvSeq(poly.total());
cvCvtSeqToArray(poly, p, CV_WHOLE_SEQ);
System.out.println(poly.total());
for(int i = 0; i < poly.total(); i ++ )
{
System.out.println(i);
CvPoint pts = new CvPoint(8);
cvCvtSeqToArray(p.position(i), pts, CV_WHOLE_SEQ);
cvDrawLine(image, new CvPoint(pts.position(0).x(),pts.position(0).y()), new CvPoint(pts.position(1).x(),pts.position(1).y()), CvScalar.GREEN, 3, CV_AA, 0);
cvDrawLine(image, new CvPoint(pts.position(1).x(),pts.position(1).y()), new CvPoint(pts.position(2).x(),pts.position(2).y()), CvScalar.GREEN, 3, CV_AA, 0);
cvDrawLine(image, new CvPoint(pts.position(2).x(),pts.position(2).y()), new CvPoint(pts.position(3).x(),pts.position(3).y()), CvScalar.GREEN, 3, CV_AA, 0);
cvDrawLine(image, new CvPoint(pts.position(3).x(),pts.position(3).y()), new CvPoint(pts.position(4).x(),pts.position(4).y()), CvScalar.GREEN, 3, CV_AA, 0);
cvDrawLine(image, new CvPoint(pts.position(4).x(),pts.position(4).y()), new CvPoint(pts.position(5).x(),pts.position(5).y()), CvScalar.GREEN, 3, CV_AA, 0);
cvDrawLine(image, new CvPoint(pts.position(5).x(),pts.position(5).y()), new CvPoint(pts.position(6).x(),pts.position(6).y()), CvScalar.GREEN, 3, CV_AA, 0);
cvDrawLine(image, new CvPoint(pts.position(6).x(),pts.position(6).y()), new CvPoint(pts.position(7).x(),pts.position(7).y()), CvScalar.GREEN, 3, CV_AA, 0);
cvDrawLine(image, new CvPoint(pts.position(7).x(),pts.position(7).y()), new CvPoint(pts.position(0).x(),pts.position(0).y()), CvScalar.GREEN, 3, CV_AA, 0);
}
}
final CanvasFrame canvas = new CanvasFrame("Test inside last");
canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
canvas.showImage(image);
}
0
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x5c995048, pid=5992, tid=4464
#
# JRE version: 6.0_16-b01
# Java VM: Java HotSpot(TM) Client VM (14.2-b01 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [opencv_core240.dll+0x55048]
#
# An error report file with more information is saved as:
# C:\Users\Space\Documents\NetBeansProjects\1MyJavacv\hs_err_pid5992.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
Java Result: 1