【发布时间】:2014-02-28 02:13:48
【问题描述】:
我正在使用 JNI 在 Android 中使用 OpenCV 2.4.8。
我用 VideoCapture 打开相机,我想录制它。我在 cv::Mat 中有图像,它正确显示在屏幕上。
但是,当我尝试打开 VideoCapture 时,它总是返回 false。
// Camera resolution is 640x480 and its fine.
_camera_resolution = calc_optimal_camera_resolution(u.name, 640, 480);
// Store in sdcard, I have permission in AndroidManifest.xml
const char * videoName = "/sdcard/videoTest.avi";
// Segmentation fault 11! this method doesnt work in Android? so commented
//const int ex = static_cast<int>(_reader.get(CV_CAP_PROP_FOURCC));
// Segmentation fault 11! too!!! so commented
//const double fps = _reader.get(CV_CAP_PROP_FPS);
// Try to open
_isRecording = _writer.open(videoName, -1, 30, _camera_resolution, true);
// Return FALSE always
if(!_writer.isOpened())
{
LOGE("rec - Error opening video writer");
}
else
{
LOGD("rec - Video writer opened in startRecording");
}
我曾尝试用作 FOURCC:
CV_FOURCC('M', 'J', 'P', 'G') 和 CV_FOURCC('M', 'P', '4', 'V') // 不起作用!
我尝试过不同的 fps 比率,15.0、30.0...
相机分辨率似乎有效,因为当我打印时值是正确的。
为什么不能正确打开?
【问题讨论】:
-
你有写权限吗?
-
正如我在帖子中所说,我的AndroidManifest有权写入:
-
可能 sdcard 位置有误,在我的应用程序中我使用的是 /mnt/sdcard/filename 之类的东西。
-
我可以用 imwrite("/sdcard/image.jpg", mat);
-
afaik,由于缺少 ffmpeg 后端,videowriter 无法在 android 上运行
标签: opencv android-ndk java-native-interface video-capture