将RGB转换为灰度

问题描述 投票:1回答:1

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);
java opencv
1个回答
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);

核实。

© www.soinside.com 2019 - 2024. All rights reserved.