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);
答案 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);
检查。