【问题标题】:Android jpeg pictureCallback to grayscale Opencv MatAndroid jpeg图片回调到灰度Opencv Mat
【发布时间】:2023-03-31 04:55:01
【问题描述】:

我正在尝试将 android pictureCallback 解码为灰度垫:

首先我尝试使用 rawPicture 回调,但总是得到空指针。

 mCamera.takePicture(null, mPicture, null);

JpegCalback 给了我 not null byte[] 数组,但 cvtColor 转换不起作用。

mCamera.takePicture(null, null, mPicture);

我的预览回调是这样的

Camera.PictureCallback mPicture = new Camera.PictureCallback() {
    @Override
        public void onPictureTaken(byte[] data, Camera camera) {

        Toast.makeText(getApplicationContext(),"picture taken",Toast.LENGTH_SHORT);
        int res=JniManager.setImage(data,m_width,m_height);
        mCamera.stopPreview();
        mCamera.startPreview();
    }
};

c++ JNI 函数:

    Java_pidaas_vicomtech_org_facerec_viulib_JniManager_setImage(JNIEnv *env,
                                                    jobject instance,
                                                    jbyteArray image,
                                                    jint width,
                                                    jint height)
     jbyte* _yuv  = env->GetByteArrayElements(image, 0);
     int len = env->GetArrayLength (image);
     unsigned char* buf = new unsigned char[len];
     env->GetByteArrayRegion (image, 0, len, reinterpret_cast<jbyte*>(buf));
     Mat rawData (cv::Size(width,height), CV_8UC3, buf );
            cv::Mat test =imdecode(rawData,CV_LOAD_IMAGE_COLOR);
            cv::Mat grey;
            cv::cvtColor(test, grey, cv::COLOR_BGR2GRAY);
            bool flag = imwrite("/sdcard/graypg.jpg", grey);
    env->ReleaseByteArrayElements(image, _yuv, 0);
}

我找到了一些答案,但没有一个有效。

由于测试,我在sdcard上写入图像,但它写入了一个0字节的空图像。

那么,有人知道我应该如何将 jpeg 像素设为灰色格式吗?

【问题讨论】:

  • len 包含什么值?我想我过去有一个类似的问题,因为 getarraylenght 有时返回 0,正确的 len 可以计算宽度 x 高度的 int 乘法
  • 你是对的,len 是 0,我没注意,因为图像损坏了,但是我看不到任何 SIGSEV 错误。谢谢。

标签: android opencv image-processing android-ndk


【解决方案1】:

也许 getarraylenght 无法正常工作并返回 0。我通常使用 lenght 作为宽度 x 高度,提供用于计算数组大小的参数。这会将数据从相机缓冲区正确复制到内存。

警告:如果大小有问题,您将遇到 Signal 11 异常!

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2012-01-17
    • 2015-11-19
    • 2021-04-05
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    相关资源
    最近更新 更多