我尝试根据由
if (isset($_POST["Answer"]))
{
**$questionbyimage = $db_handle->runQuery("select * from ask where description='" . $_GET['description'] . "'");** //the line of error
$queArray = array($questionbyimage[0]['description']=>array('questionphoto'=>$questionbyimage[0]["questionphoto"]));
$answer=$queArray ;
?>
<div class="form">
<h1> Question </h1>
<form action="NewAnswer.php" method="post" enctype ="multipart/form-data">
<img src="<?php echo $answer["questionphoto"];?>" style="height=250px;width=250px;">
<p> <? php echo $answer["description"];?></p>
</form>
</div>
</div>`
。
我遵循了OpenCV Python tutorial(因为没有Java教程),并且在代码完成方面摆弄。
这是代码:
convexHull()
但这会引发以下异常:
Imgproc.findContours(patternEdges, patternContours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); MatOfInt patternHull = new MatOfInt(); Imgproc.convexHull(patternContours.get(0), patternHull); Imgproc.contourArea(pickPoints(patternContours.get(0), patternHull)); // fails here
显然,矩阵内部数据类型错误。但是为什么,以及如何转换呢?
我正在使用OpenCV 4.1.2。
答案 0 :(得分:0)
问题是,在Java中,API仅实现填充Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: OpenCV(4.1.2) /home/build/git/opencv/modules/imgproc/src/shapedescr.cpp:274: error: (-215:Assertion failed) npoints >= 0 && (depth == CV_32F || depth == CV_32S) in function 'contourArea']
at org.opencv.imgproc.Imgproc.contourArea_1(Native Method)
at org.opencv.imgproc.Imgproc.contourArea(Imgproc.java:1607)
at com.acme.opencv.Test.main(Test.java:94)
与原始点矩阵的索引。
Javadoc(直接从C ++文档生成)是这样的:
MatOfInt
输出凸包。 它是索引的整数向量或 点向量。 在第一种情况下,船体元素是从0开始的索引 原始数组中凸包点的数量(因为凸包集 点是原始点集的子集。)在第二种情况下,船体 元素本身就是凸包点。(强调我的)
没有“或”。只有hull
,它是
原始MatOfInt
矩阵。
您可以通过这样的辅助函数使用拾取的点创建一个新的矩阵:
Point
然后使用它:
private static MatOfPoint2f pickPoints(MatOfPoint points, MatOfInt indices) {
Point[] pickedPoints = new Point[indices.rows()];
int newRow = 0;
for (int index : indices.toArray()) {
pickedPoints[newRow++] = new Point(points.get(index, 0));
}
return new MatOfPoint2f(pickedPoints);
}