Как объявить небольшое изображение для тестирования в openCV Android? - PullRequest
0 голосов
/ 15 апреля 2020

Документ минимальный или не существует, я прочитал Официальные заявления OpenCV c и объявляют Mat в OpenCV java из stackoverflow

I Я провел некоторое исследование алгоритма обработки изображений с использованием Python ноутбука Jupyter, в данный момент я хочу проверить его в Android python.

Для части Python:

from numpy import asarray

dimg = cv2.imread('story/IMG_0371.PNG')
dimg_small = dimg[571:572, 401:402]
dimg_small_gamma = adjust_gamma(dimg_small)
data = asarray(dimg_small)
data_gamma = asarray(dimg_small_gamma)

# print data
array([[[52, 45, 44]]], dtype=uint8)
# print data_gamma
array([[[115, 107, 105]]], dtype=uint8)

Изображение dimg_small должно выглядеть так:

enter image description here

Между тем, изображение dimg_small_gamma должно выглядеть так:

enter image description here

Пока что я хочу создать изображение с теми же данными [52, 45, 44] и 115, 107, 105 в Android, чтобы проверить мой алгоритм, либо Java, либо Kotlin было бы хорошо.

private fun genTestMat(): Mat { //upper one
    val img =  Mat( 3, 1, CvType.CV_8UC3)
    img.put(3, 1,52.0, 45.0, 44.0)
    return img
}

private fun genTestMat2(): Mat { //under one
    val img =  Mat( 3, 1, CvType.CV_8UC3)
    img.put(3, 1,115.0, 107.0, 105.0)
    return img
}

private fun opencvMatToBitmap(mat: Mat): Bitmap {
    val bitmap: Bitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888)
    Utils.matToBitmap(mat, bitmap)
    return bitmap
}

...

val testImg = opencvMatToBitmap(genTestMat())
val testImg2 = opencvMatToBitmap(genTestMat2())

image_under.setImageBitmap(testImg2)
image_upper.setImageBitmap(testImg)

С показом изображения на моем Android устройстве: enter image description here

Мне было интересно, как сделать Android показать то же изображение, что и в Python записной книжке Jupyter?

Обновлено:

Пытался Mat.put использовать массив следующим образом:

private fun genTestMat(): Mat { //upper one
    val img =  Mat( 3, 1, CvType.CV_8UC3)
    val data = floatArrayOf(52f, 45f, 44f)
    img.put(1,1, data)
    return img
}

К сожалению, он упал :

Caused by: java.lang.UnsupportedOperationException: Mat data type is not compatible: 16
        at org.opencv.core.Mat.put(Mat.java:801)
        at com.example.cap2hist.MainActivity.genTestMat(MainActivity.kt:131)

1 Ответ

0 голосов
/ 27 апреля 2020

После чата с людьми в openCV forum , получил ответ.

private fun genTestMat(): Mat {
    val inputMat = Mat( 1, 1, CvType.CV_8UC3)
    val rgbMat = Mat()
    Imgproc.cvtColor(inputMat, rgbMat, Imgproc.COLOR_BGR2RGBA, 3)
    rgbMat.setTo(Scalar(52.0, 45.0, 44.0))
    return rgbMat
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...