简体   繁体   English

将 RGB 转换为灰度

[英]Converting RGB to grayscale

output result I´m trying to convert from bgr to grayscale using opencv in android , when the application starts the screen displays the image as shown below and crashes.输出结果我正在尝试使用android opencv从 bgr 转换为灰度,当应用程序启动时,屏幕显示如下所示的图像并崩溃。 I tried all possible ways but couldn't get the grayscale.我尝试了所有可能的方法,但无法获得灰度。 Please let me know the error in this code.请让我知道此代码中的错误。 It would be very helpful.这将非常有帮助。 Thanks.谢谢。

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);

I think this problem is related with declaration cameraRGBImage .我认为这个问题与声明cameraRGBImage相关。 You defined this matrix as 1 channel matrix.您将此矩阵定义为 1 通道矩阵。 To determine RGB matrix you should:要确定 RGB 矩阵,您应该:

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

If you convert RGB to Gray is recommended to declare a new matrix:如果将 RGB 转换为 Gray 建议声明一个新矩阵:

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

Check it.核实。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM