Tôi đang tìm cách thiết lập giá trị chế độ cảnh cho máy ảnh web từ C++ (Android NDK).Đặt chế độ cảnh quay camera cho OpenCV trên Android
OpenCV nhận các giá trị từ máy ảnh web khi nó được khởi tạo. Trong nhật ký bên dưới, nhật ký ghi là Supported Scene Modes: auto,action,portrait,landscape,beach,fireworks,night,night-portrait,snow,sports,steadyphoto,sunset,theatre,barcode
.
Tôi muốn đặt một trong các giá trị (chẳng hạn như bãi biển) cho máy ảnh.
D/OpenCV::camera﹕ CvCapture_Android::CvCapture_Android(1)
D/OpenCV::camera﹕ Library name: libopencv_java.so
D/OpenCV::camera﹕ Library base address: 0x69f3b000
D/OpenCV::camera﹕ Libraries folder found: /data/app-lib/gms.rewards.selfie-2/
D/OpenCV::camera﹕ CameraWrapperConnector::connectToLib: folderPath=/data/app-lib/gms.rewards.selfie-2/
E/OpenCV::camera﹕ ||libnative_camera_r4.1.1.so
E/OpenCV::camera﹕ ||libnative_camera_r4.0.3.so
E/OpenCV::camera﹕ ||libnative_camera_r2.3.3.so
E/OpenCV::camera﹕ ||libnative_camera_r4.2.0.so
E/OpenCV::camera﹕ ||libnative_camera_r2.2.0.so
E/OpenCV::camera﹕ ||libnative_camera_r3.0.1.so
E/OpenCV::camera﹕ ||libnative_camera_r4.3.0.so
E/OpenCV::camera﹕ ||libnative_camera_r4.0.0.so
E/OpenCV::camera﹕ ||libnative_camera_r4.4.0.so
D/OpenCV::camera﹕ try to load library 'libnative_camera_r4.4.0.so'
D/OpenCV::camera﹕ CameraWrapperConnector::connectToLib ERROR: cannot dlopen camera wrapper library /data/app-lib/gms.rewards.selfie-2/libnative_camera_r4.4.0.so, dlerror="Cannot load library: soinfo_relocate(linker.cpp:975): cannot locate symbol "_ZN7android17IConsumerListenerD2Ev" referenced by "libnative_camera_r4.4.0.so"..."
D/OpenCV::camera﹕ try to load library 'libnative_camera_r4.3.0.so'
D/OpenCV::camera﹕ CameraWrapperConnector::connectToLib ERROR: cannot dlopen camera wrapper library /data/app-lib/gms.rewards.selfie-2/libnative_camera_r4.3.0.so, dlerror="Cannot load library: soinfo_relocate(linker.cpp:975): cannot locate symbol "_ZN7android6Camera17setPreviewTextureERKNS_2spINS_22IGraphicBufferProducerEEE" referenced by "libnative_camera_r4.3.0.so"..."
D/OpenCV::camera﹕ try to load library 'libnative_camera_r4.2.0.so'
D/OpenCV::camera﹕ Loaded library '/data/app-lib/gms.rewards.selfie-2/libnative_camera_r4.2.0.so'
D/OpenCV_NativeCamera﹕ CameraHandler::initCameraConnect(0x6a64eb6d, 1, 0x69359e18, 0x0)
D/OpenCV_NativeCamera﹕ Connecting to CameraService v 2.3
D/OpenCV_NativeCamera﹕ Instantiated new CameraHandler (0x6a64eb6d, 0x69359e18)
I/OpenCV_NativeCamera﹕ initCameraConnect: [antibanding=auto;antibanding-values=off,auto,50hz,60hz;auto-exposure-lock=false;auto-exposure-lock-supported=true;auto-exposure-lock-values=false,true;auto-whitebalance-lock=false;auto-whitebalance-lock-supported=true;auto-whitebalance-lock-values=false,true;effect=none;effect-values=mono,negative,none,posterize,sepia,aqua,solarize,nv-vivid,nv-emboss;exposure-compensation-step=0.1;flash-mode=off;flash-mode-values=off,on,auto,torch,red-eye;focal-length=1.000;focus-areas=(0,0,0,0,0);focus-distances=0.95,1.9,Infinity;focus-mode=fixed;focus-mode-values=fixed;horizontal-view-angle=60.000;jpeg-quality=95;jpeg-thumbnail-height=240;jpeg-thumbnail-quality=90;jpeg-thumbnail-size-values=0x0,320x240,240x320;jpeg-thumbnail-width=320;max-exposure-compensation=20;max-num-detected-faces-hw=10;max-num-focus-areas=0;max-num-metering-areas=4;max-zoom=28;metering-areas=(0,0,0,0,0);min-exposure-compensation=-20;picture-format=jpeg;picture-format-values=jpeg,jfif,exif,yuv420p,yuv420sp;picture-size=1280x960;pic
D/OpenCV_NativeCamera﹕ Supported Cameras: (null)
D/OpenCV_NativeCamera﹕ Supported Picture Sizes: 320x240,480x480,640x368,640x480,800x600,960x720,1024x768,1280x720,1280x752,1280x960,1440x1080,1600x1200,1836x1080,1920x1080,2048x1152,2048x1360,2048x1536,2592x1456,2592x1520,2592x1920,2592x1944
D/OpenCV_NativeCamera﹕ Supported Picture Formats: jpeg,jfif,exif,yuv420p,yuv420sp
D/OpenCV_NativeCamera﹕ Supported Preview Sizes: 176x144,320x240,352x288,480x480,640x480,704x576,720x408,720x480,720x576,768x432,800x448,960x720,1280x720,1280x752,1280x960,1360x720,1440x1080,1920x1080,1920x1088,1920x1440
D/OpenCV_NativeCamera﹕ Supported Preview Formats: yuv420p,yuv420sp
D/OpenCV_NativeCamera﹕ Supported Preview Frame Rates: 5,8,10,15,20,24,25,30
D/OpenCV_NativeCamera﹕ Supported Thumbnail Sizes: 0x0,320x240,240x320
D/OpenCV_NativeCamera﹕ Supported Whitebalance Modes: auto,incandescent,fluorescent,warm-fluorescent,daylight,cloudy-daylight,shade,twilight
D/OpenCV_NativeCamera﹕ Supported Effects: mono,negative,none,posterize,sepia,aqua,solarize,nv-vivid,nv-emboss
D/OpenCV_NativeCamera﹕ Supported Scene Modes: auto,action,portrait,landscape,beach,fireworks,night,night-portrait,snow,sports,steadyphoto,sunset,theatre,barcode
D/OpenCV_NativeCamera﹕ Supported Focus Modes: fixed
D/OpenCV_NativeCamera﹕ Supported Antibanding Options: off,auto,50hz,60hz
D/OpenCV_NativeCamera﹕ Supported Flash Modes: off,on,auto,torch,red-eye
D/OpenCV_NativeCamera﹕ initCameraConnect: preview format is set to yuv420sp
D/OpenCV_NativeCamera﹕ Starting preview
D/OpenCV_NativeCamera﹕ Preview started successfully
Ví dụ mã (Không chính xác cùng một mã mà tôi sử dụng):
cv::Mat inframe = cv::Mat();
cv::VideoCapture mCamera;
mCamera.open(1);
mCamera.set(CV_CAP_PROP_FRAME_WIDTH, 400);
mCamera.set(CV_CAP_PROP_FRAME_HEIGHT, 300);
// mCamera.set("scene mode", "beach"); // <-- looking for a way
while (mCamera.isOpened()) {
bool grab = mCamera.grab();
if (grab) {
mCamera.retrieve(inframe, CV_CAP_ANDROID_COLOR_FRAME_RGB);
// To do something for the iframe
} else {
LOGE("--->Cannot grab a frame from camera.");
}
}
mCamera.release();
Tôi nghĩ rằng không có cách nào để sử dụng setSceneMode cho nó đã được mở bởi lớp VideoCapture. Lớp VideoCapture là một trình bao bọc của V4L2, vì vậy tôi nghĩ có một số cách để thiết lập giá trị bằng phương thức set(), nhưng có vẻ như OpenCV không cung cấp mã nguồn của lớp VideoCapture. – wf9a5m75
Tôi nghĩ như vậy, lớp VideoCapture' của OpenCV không cung cấp cơ hội thiết lập chế độ cảnh. Có, 'VideoCapture' là một trình bao bọc của một số giao diện xử lý phương tiện (ví dụ: V4L2, VFW, DSHOW, OpenNI, v.v.). Ngay cả đối với Android có một lớp bao bọc, nó không phải là một bí mật như bạn nghĩ, bạn có thể có nguồn [ở đây] (https: // github.com/Itseez/opencv/blob/master/modules/videoio/src/cap_android.cpp). – Kornel
Và đây là mô-đun trình bao bọc máy ảnh của OpenCV: [opencv/modules/androidcamera] (https://github.com/Itseez/opencv/tree/master/modules/androidcamera) – Kornel