JavaでOpenCVを導入してテンプレートマッチングを行ないたいのですが、エラーが出ます。
どういったエラーなのか教えていただけないでしょうか。
Imgproc.matchTemplate(im, tmp, result, Imgproc.TM_CCOEFF_NORMED);
文をコメントアウトすると最後まで処理をおこなってくれます。
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class CvTest {
public static void main(String args[]){
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat im = Imgcodecs.imread("/Users/suzuken/Desktop/mario.jpg"); // 入力画像の取得
Mat tmp = Imgcodecs.imread("/Users/suzuken/Desktop/mario_coin.jpg");// テンプレート画像の取得
Mat result = new Mat();
Imgproc.matchTemplate(im, tmp, result, Imgproc.TM_CCOEFF_NORMED);//テンプレートマッチング
Imgproc.threshold(result, result, 0.8, 1.0, Imgproc.THRESH_TOZERO); // 検出結果から相関係数がしきい値以下の部分を削除
// テンプレート画像の部分を元画像に赤色の矩形で囲む
for (int i=0;i<result.rows();i++) {
for (int j=0;j<result.cols();j++) {
if (result.get(i, j)[0] > 0) {
Imgproc.rectangle(im, new Point(j, i), new Point(j + tmp.cols(), i + tmp.rows()), new Scalar(0, 0, 255));
}
}
}
Imgcodecs.imwrite("/Users/suzuken/Desktop/print.jpg", im);// 画像の出力
System.out.println("Finish");
}
}
以下エラー文です。
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: OpenCV(4.0.1) /tmp/opencv-20190315-35369-12z29q7/opencv-4.0.1/modules/imgproc/src/templmatch.cpp:1107: error: (-215:Assertion failed) (depth == CV_8U || depth == CV_32F) && type == _templ.type() && _img.dims() <= 2 in function 'matchTemplate'
]
at org.opencv.imgproc.Imgproc.matchTemplate_1(Native Method)
at org.opencv.imgproc.Imgproc.matchTemplate(Imgproc.java:3213)
at CvTest.main(CvTest.java:17)
回答1件
あなたの回答
tips
プレビュー