当前位置: 首页 > 知识库问答 >
问题:

Android jpeg pictureCallback到灰度Opencv Mat

扈俊健
2023-03-14

首先,我尝试使用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);
}

我找到了一些答案,但都不起作用。

  • 带有raw PicturecallBack的Android相机的格式是什么?
  • 如何在OpenCV中将CV::Mat转换为灰度?
  • OpenCV从缓冲区读取jpeg图像

暂时还没有答案

 类似资料:
  • 对于灰度发布,这里主要讲解如何实现,我所在的公司虽然使用这个逻辑实现的. 但是由于掺杂了太多业务相关东西,比如抓包,限流,缓存,校验,sso,云化,监控告警,成为了一个运维平台. 造成无法开源,真是好可惜.做这个系统多年还是想让大家来找找茬刷刷存在感的 我想当前没有一个开源的可能也和这个原因有关,太多功能和业务相关难以抽离成纯粹组件开源. 下面先讲主要逻辑结构,请看下图 这里需要讲解下这里面几个名

  • 大家好,我有问题在灰度bmp图像转换成整数2D数组(值0-255)在Java。 我有一个pmb图像,可以被看作一个整数(0-255)2D数组,我想在Java数据结构中看到这个2D数组 我试着这样做: 然后使用我的BufferedImage我创建int[][]这样: 但是现在所有的2D数组都充满了像“-9211021”或类似的数字。 我认为问题在getRGB(j,k)中,但我不知道是否有可能解决它。

  • 灰度升级简介 灰度升级功能支持产品的平滑发布,让一部分用户使用旧产品,一部分用户使用新产品,逐步扩大新产品用户范围,最后全部迁移到新产品上来。保证整体系统的稳定。 灰度升级使用场景举例 假设有一个旧应用为客户提供服务,在应用引擎中部署为应用A,公司准备上线一个新版本,可以在应用引擎中部署为应用B(两者必须在同一个space下)。 点击进入应用B的详情页面,点击左上角的灰度升级,选择应用A,点击完成

  • 文件:TIFF,2页,灰度,16位 我想读取16位Tiff,然后将其转换为显示为8位。 当我使用

  • 我正在尝试转换一个。使用BuffereImage将包含灰度值的csv文件转换为图像。csv最初被读入,其中所有值都是双倍的。 我正在尝试使用BufferedImage使用代码创建100x100px输出图像 但我只有一个100x100的黑色方块作为输出。 我尝试了以及outout的png格式,但没有成功,也找不到导致此错误的原因。

  • 我使用以下代码来获取灰度图像的R、G、B值(它们都将是相同的),但输出给我负值。 为什么会这样?我完全糊涂了。 此处,结果[1]应对应于“R”值。那幺它怎么会是负面的呢?