выходной результат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);




Думаю, эта проблема связана с объявлением камераRGBImage. Вы определили эту матрицу как 1-канальную матрицу. Для определения матрицы RGB вам необходимо:
cv::Mat cameraRGBImage(mPreview_height * 1.5, mPreview_width, CV_8UC3);
При преобразовании RGB в серый рекомендуется объявить новую матрицу:
cv::Mat cameraGrayImagae;
cv::cvtColor(cameraRGBImage,cameraGrayImagae,CV_BGR2GRAY);
Проверь это.
для приведенного выше кода, который я опубликовал, когда я запускаю приложение, оно дает изображение в оттенках серого, но оно делится на три части и вылетает.
Спасибо, но когда я выполняю изменения, как вы упомянули, и запускаю приложение, он принудительно закрывает приложение.