OpenCV Error: Assertion failed Android studio OpenCV

589
06 мая 2017, 20:07

Собственно, пытаюсь реализовать с помощью библиотеки OpenCV нахождения по шаблону на изображении. Но столкнулся со следующей ошибкой. Она возникает при выполнении: Imgproc.matchTemplate(img, templ, result, matchType);

E/cv::error(): OpenCV Error: Assertion failed (corrsize.height <= img.rows + templ.rows - 1 && corrsize.width <= img.cols + templ.cols - 1) in void cv::crossCorr(const cv::Mat&, const cv::Mat&, cv::Mat&, cv::Size, int, cv::Point, double, int), file /Volumes/Linux/builds/master_pack-android/opencv/modules/imgproc/src/templmatch.cpp

public class test extends AppCompatActivity{
    private String mainImgPath, templateImgPath, resultImgPath;
    private EditText etFirst,etSecond;
    private static final String TAG = "Test";
    private Button btnFind;
    static {
        if(!OpenCVLoader.initDebug()){
            Log.e(TAG, "OpenCV not loaded");
        } else {
            Log.e(TAG, "OpenCV loaded");
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.show_camera);
        System.loadLibrary("opencv_java3");
        btnFind = (Button)findViewById(R.id.btnFind);
        etFirst = (EditText)findViewById(R.id.etFirst);
        etSecond = (EditText)findViewById(R.id.etSecond);
        final String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
        resultImgPath = baseDir+"/DCIM/Camera/result.jpg";
        btnFind.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mainImgPath = baseDir + "/DCIM/Camera/1.jpg";
                templateImgPath = baseDir + "/DCIM/Camera/2.jpg";
                matchingDemo(mainImgPath, templateImgPath, resultImgPath, Imgproc.TM_SQDIFF);
            }
        });
    }
    public void matchingDemo(String imgPath,String templatePath,String resPath, int matchType){
        Mat img = Imgcodecs.imread(imgPath);
        Mat templ = Imgcodecs.imread(templatePath);
        int result_cols = img.cols() - templ.cols() + 1;
        int result_rows = img.rows() - templ.rows() + 1;
        Mat result = new Mat(result_rows, result_cols,  CvType.CV_32FC1);
        Imgproc.matchTemplate(img, templ, result, matchType);
        int type = Imgproc.THRESH_TOZERO;
        Imgproc.threshold(result, result, 0.8, 1., type);
        Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat());
        Core.MinMaxLocResult mmr = Core.minMaxLoc(result);
        Point matchLoc;
        if (matchType == Imgproc.TM_SQDIFF || matchType == Imgproc.TM_SQDIFF_NORMED) {
            matchLoc = mmr.minLoc;
        } else {
            matchLoc = mmr.maxLoc;
        }
        Imgproc.rectangle(img, matchLoc, new Point(matchLoc.x + templ.cols(),
                matchLoc.y + templ.rows()), new Scalar(0, 255, 0));
        Imgcodecs.imwrite(resPath, img);
        Mat image = Imgcodecs.imread(resPath);
        Bitmap bm = Bitmap.createBitmap(image.cols(),image.rows(), null);
        Utils.matToBitmap(image, bm);
        ImageView iv = (ImageView) findViewById(R.id.imgResult);
        iv.setImageBitmap(bm);
    }
}
READ ALSO
Где скачать JDK 8 для Windows 7 32bit?

Где скачать JDK 8 для Windows 7 32bit?

Всем добрый вечер, я не смог найти где скачать JDK 8 для семерки 32bitВот тут http://free-software

294
How to construct a map(for game) from text file( Java) [требует правки]

How to construct a map(for game) from text file( Java) [требует правки]

given a matrix, need to create class Map, that creats a Pane (Javafx)

238
online test java in russian language [требует правки]

online test java in russian language [требует правки]

есть ли онлайн тесты на java по русски?? скиньте ссылки

216
Не получается использоваться annotation Lombok

Не получается использоваться annotation Lombok

Пытаюсь использовать аннотации Lombok @Getter @Setter, поставил галочку Enable annotation processingНо, получить возможность вызвать getter setter не получил

212