Итак, я выполняю сопоставление шаблона для определенной области из входного изображения, используя OpenCVCameraView
. Ниже показано, как выглядит мой код.
Mat input;
Rect bigRect = ...; //specific size
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
input = inputFrame.rgba();
...
}
public void Template(View view) {
Mat mImage = input.submat(bigRect);
Mat mTemplate = Utils.loadResource(this, R.id.sample, Highgui.CV_LOAD_IMAGE_COLOR);
Mat mResult = new Mat(mImage.rows(), mImage.cols(), CvType.CV_32FC1); // I use the same size as mImage because mImage's size is already smaller than inputFrame
Imgproc.cvtColor(mImage, mImage, Imgproc.COLOR_RGBA2RGB); //convert is needed to make mImage and mTemplate to be the same type
Imgproc.matchTemplate(mImage, mTemplate, mResult, match_method);
Core.normalize(mResult, mResult, 0, 1, Core.NORM_MINMAX, -1, new Mat());
mResult.convertTo(mResult, CvType.CV_8UC1); // I convert the matrix because I need to show it to imageview via bitmap
Bitmap bmResult1 = Bitmap.createBitmap(mImage.width(), mImage.height(), Bitmap.Config.RGB_565);
Bitmap bmResult2 = Bitmap.createBitmap(mResult.width(), mResult.height(), Bitmap.Config.RGB_565);
Utils.matToBitmap(mImage, bmResult1);
Utils.matToBitmap(mResult, bmResult2);
ImageView1.setImageBitmap(bmResult1);
ImageView2.setImageBitmap(bmResult2);
}
Я пытаюсь вывести матрицу с помощью toString()
и получил следующие результаты:
mImage: Mat [250*178*CV_8UC3, isCont=true, isSubmat=false, ...]
mResult: Mat [180*94*CV_8UC1, isCont=true, usSubmat=false, ...]
И мои вопросы:
- Почему размер
mResult
меньше размераmImage
, несмотря на то, что уже объявлено, что размерmResult
основан на размереmImage
? - Оказывается, при использовании типа
CV_8UC1
содержимое доступно только в черном или белом цвете, в то время как mResult должен иметь плавающее значение, но методUtils.matToBitmap
не поддерживает типы матов, кромеCV_8UC1
,CV_8UC3
иCV_8UC4
. Есть ли способ показатьCV_32FC1
растровому изображению, что он показывает реальную шкалу серогоmResult
?
result – Map of comparison results. It must be single-channel 32-bit floating-point. If image is W \times H and templ is w \times h , then result is (W-w+1) \times (H-h+1) .
поэтому я думаю, что ваш шаблон имеет размер [69, 83] ?? - person Micka   schedule 18.05.2015