5
をグレースケールに私は、グレースケールマットにアンドロイドpictureCallbackを解読しようとしている:AndroidのJPEG pictureCallbackは、OpenCVのマット
まず私はrawPictureコールバックを使用しようとしたが、いつも私はNULLポインタを取得します。
mCamera.takePicture(null, mPicture, null);
JpegCalbackはnullではないbyte []配列を返しますが、cvtColor変換は機能しません。私はいくつかの答えを発見したが、それらのどれも働かない
Java_pidaas_vicomtech_org_facerec_viulib_JniManager_setImage(JNIEnv *env,
jobject instance,
jbyteArray image,
jint width,
jint height)
jbyte* _yuv = env->GetByteArrayElements(image, 0);
int len = env->GetArrayLength (image);
unsigned char* buf = new unsigned char[len];
env->GetByteArrayRegion (image, 0, len, reinterpret_cast<jbyte*>(buf));
Mat rawData (cv::Size(width,height), CV_8UC3, buf);
cv::Mat test =imdecode(rawData,CV_LOAD_IMAGE_COLOR);
cv::Mat grey;
cv::cvtColor(test, grey, cv::COLOR_BGR2GRAY);
bool flag = imwrite("/sdcard/graypg.jpg", grey);
env->ReleaseByteArrayElements(image, _yuv, 0);
}
:
mCamera.takePicture(null, null, mPicture);
マイプレビューコールバックはこの
Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Toast.makeText(getApplicationContext(),"picture taken",Toast.LENGTH_SHORT);
int res=JniManager.setImage(data,m_width,m_height);
mCamera.stopPreview();
mCamera.startPreview();
}
};
C++ JNI関数です。
- What format is for Android camera with raw pictureCallback?
- How can I convert a cv::Mat to a gray scale in OpenCv?
- opencv read jpeg image from buffer
ため、私はテストのSDカードに画像を書き、それが0バイトの空のイメージを書き込みます。
だから、どうすればjpegピクセルをグレーのフォーマットにするべきですか?
lenにはどのような値が入りますか? getarraylenghtは時々0を返すので、私は過去に同様の問題を抱えていると思います。正しいlenはwidth x heightのint乗算を計算することができます – vgonisanz
あなたは正しいです、lenは0です、画像は壊れています、私はSIGSEVエラーを見ることができませんでした。ありがとう。 – uelordi