Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV Android-匹配模板错误_Android_Opencv_Image Processing - Fatal编程技术网

OpenCV Android-匹配模板错误

OpenCV Android-匹配模板错误,android,opencv,image-processing,Android,Opencv,Image Processing,我在这里看到了一些与我的错误相关的问题,比如和,我知道如果图像和模板没有相同的数据类型,我就不能执行Imgproc.matchTemplate()方法。但我仍然对如何知道我使用的是什么类型的Mat感到困惑 下面是我根据示例改编的代码: 我尝试先用相同的类型初始化mImage和mTemplate,但仍然没有成功。有什么建议吗?之前谢谢。错误告诉您图像和模板有不同的类型 Assertion failed ... img.type() == templ.type() .... 我愿意(少量)打赌m

我在这里看到了一些与我的错误相关的问题,比如和,我知道如果图像和模板没有相同的数据类型,我就不能执行
Imgproc.matchTemplate()
方法。但我仍然对如何知道我使用的是什么类型的
Mat
感到困惑

下面是我根据示例改编的代码:


我尝试先用相同的类型初始化
mImage
mTemplate
,但仍然没有成功。有什么建议吗?之前谢谢。

错误告诉您图像和模板有不同的类型

Assertion failed  ... img.type() == templ.type() ....
我愿意(少量)打赌
mTemplate
是CV_8UC3 BGR订购的

从您发布的代码中,如果是从相机帧中提取的,并且您执行了以下操作,则无法判断mImage的类型:

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
     Mat inputFrame = inputFrame.rgba();
     ....
}
那么很可能是CV_8UC4 BGRA订购的。这不是同一类型

另外,我不确定submat()的行为是一个3D或4D输入矩阵,我认为它被设计为只对2D矩阵进行操作,因此您可能会发现它返回2D矩阵(CV_8UC2)或一些未定义的奇怪


我建议您尝试在调用
matchTemplate(…)
之前转储
type()
depth()
或同时转储图像和模板。

因为这个问题中的断言是相同的-这个答案可能会有所帮助。啊,是的,我做了
inputFrame.rgba()用于输入矩阵。那么,我如何才能尝试转储这些东西呢?对不起,如果我不清楚的话,转储的意思是“打印出值”,这样您就可以确定类型和深度。通过检查这些值,您可以看到错误是什么。如果您想将捕获的图像转换为RGB(与模板相同的空间),您会导致
Imgproc.cvtColor(inputFrame,inputFrame,Imgproc.COLOR\u RGBA2RGB)
有趣,我尝试打印每个垫子的
深度()
类型()
,它们的值相同,分别是
0
16
。然后我还尝试了
toString()
函数,两者都给出了相同的类型,即
CV\u 8UC3
。但幸好使用上面的
cvtColor
函数解决了这个问题。非常感谢。很高兴听到你的工作。如果你对我的回答满意,你能接受吗?谢谢
Assertion failed  ... img.type() == templ.type() ....
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
     Mat inputFrame = inputFrame.rgba();
     ....
}