Неразрешенная ссылка rgba () и grey () - PullRequest
0 голосов
/ 25 сентября 2019

Во всех прочитанных мною учебниках для использования OpenCV Camera в Android приложении упоминается, что:

    override fun onCameraFrame(inputFrame: CameraBridgeViewBase.CvCameraViewFrame): Mat {
        // retrieve the frame from `inputFrame`
        // - the grayscale frame by imputFrame.gray()
        // - the RGBA frame by inputFrame.rgba()

        return inputFrame.rgba() // will show in the UI
    }

Я пробовал оба imputFrame.gray() и inputFrame.rgba(), но получил ту же ошибкудля обоих случаев:

Unresolved reference rgba()

Если я попытался использовать только return inputFrame, я получаю черный экран.

Я также попробовал следующее, но все еще получаю черный экран:

import org.opencv.android.CameraBridgeViewBase
import org.opencv.core.CvType.CV_8U
import org.opencv.core.Mat
import org.opencv.imgproc.Imgproc


class OpenCVCListner(context: Context) : CameraBridgeViewBase.CvCameraViewListener {
    private var mRgba: Mat? = null
    private var mGray: Mat? = null
    override fun onCameraViewStarted(width: Int, height: Int) {
        mGray = Mat()
        mRgba = Mat()
    }

    override fun onCameraViewStopped() {

    }

    override fun onCameraFrame(inputFrame: Mat?): Mat {
        inputFrame!!.convertTo(mRgba, CV_8U, 1.0, 0.0)
        Imgproc.cvtColor(mRgba, mGray, Imgproc.COLOR_BGRA2GRAY)
        return mGray!!
    }
}

В основной деятельности по вызову камеры я имею:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val ocvLoaded = OpenCVLoader.initDebug()
        if (ocvLoaded) {
            loadModel(this)
            Toast.makeText(
                this@MainActivity, "OpenCV loaded",
                Toast.LENGTH_SHORT
            ).show()
            opencv_jcv.apply {
                setCvCameraViewListener(OpenCVCListner(this@MainActivity))
                setCameraIndex(1)
                enableView()
            }

        } else {
            Toast.makeText(
                this@MainActivity, "Unable to load OpenCV",
                Toast.LENGTH_SHORT
            ).show()
            Log.d("openCV", "loader: ${OpenCVLoader.initDebug()}")
        }
    }
}

И в моем макете я имею:

    <org.opencv.android.JavaCameraView
        android:id="@+id/opencv_jcv"
        android:layout_width="343dp"
        android:layout_height="378dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.498"
        tools:layout_editor_absoluteX="34dp" />
...