Преобразование RGB в оттенки серого

выходной результатI´m пытается преобразовать из bgr в оттенки серого, используя opencv в android, при запуске приложения на экране отображается изображение, как показано ниже, и происходит сбой. Я перепробовал все возможные способы, но не смог получить оттенки серого. Сообщите мне об ошибке в этом коде. Было бы очень полезно. Спасибо.

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);
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
173
1

Ответы 1

Думаю, эта проблема связана с объявлением камераRGBImage. Вы определили эту матрицу как 1-канальную матрицу. Для определения матрицы RGB вам необходимо:

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

При преобразовании RGB в серый рекомендуется объявить новую матрицу:

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

Проверь это.

Спасибо, но когда я выполняю изменения, как вы упомянули, и запускаю приложение, он принудительно закрывает приложение.

rumaiza 24.08.2018 07:54

для приведенного выше кода, который я опубликовал, когда я запускаю приложение, оно дает изображение в оттенках серого, но оно делится на три части и вылетает.

rumaiza 24.08.2018 08:11

Другие вопросы по теме