将RGB转换为灰度

时间:2018-08-21 06:40:37

标签: java opencv

output result 我正在尝试使用opencv中的android从bgr转换为灰度,当应用程序启动时,屏幕显示如下图所示的图像,然后崩溃。 我尝试了所有可能的方法,但无法获得灰度。请让我知道此代码中的错误。这将非常有帮助。谢谢。

JNIEXPORT void JNICALL
Java_com_preksh_cornerdetection_CameraClass_SendCamImageToNative(JNIEnv *env,
                                                                          jobject instance,
                                                                          jbyteArray data_,
                                                                          jint mPreview_height,
                                                                          jint mPreview_width,
                                                                          jintArray Keypoints_java_) {
if(gCornerObject == NULL) {
    return;
}

jbyte *data = env->GetByteArrayElements(data_, NULL);
jint *Keypoints_java = env->GetIntArrayElements(Keypoints_java_, NULL);

// Android returns data in NV21 format, convert it to RGB
cv::Mat cameraNV21Image(mPreview_height * 1.5, mPreview_width, CV_8UC1, data);
cv::Mat cameraRGBImage(mPreview_height * 1.5, mPreview_width, CV_8UC1);


cv::cvtColor(cameraNV21Image, cameraRGBImage, CV_YUV2RGB_NV21, 3);

cv::cvtColor(cameraRGBImage, cameraRGBImage, CV_BGR2GRAY);


gCornerObject->ProcessCameraImage(cameraRGBImage, mPreview_width, mPreview_height, Keypoints_java);

1 个答案:

答案 0 :(得分:1)

我认为此问题与声明 cameraRGBImage 有关。您将此矩阵定义为1通道矩阵。要确定RGB矩阵,您应该:

cv::Mat cameraRGBImage(mPreview_height * 1.5, mPreview_width, CV_8UC3);

如果将RGB转换为灰色,建议声明一个新矩阵:

cv::Mat cameraGrayImagae;
cv::cvtColor(cameraRGBImage,cameraGrayImagae,CV_BGR2GRAY);

检查。