Код: Выделить всё
cv::VideoCapture cap;
int modes[] = {CV_8UC3, CV_8SC3, CV_16UC3, CV_16SC3};
char* smodes[] = {"CV_8UC3", "CV_8SC3", "CV_16UC3", "CV_16SC3"};
cap.open("/dev/video0", cv::CAP_ANY);
if(cap.isOpened()) {
printf("---> Camera is open!\n");
for (int i=0; i< 4; i++) {
printf("---> Testing mode %s!\n", smodes[i]);
cv::Mat frame(disp_height, disp_width, modes[i]);
cap >> frame;
char* str;
asprintf(&str, "./pics/pic_%s.jpg", smodes[i]);
bool check = cv::imwrite(str, frame);
if (check == false) {
printf("\n >>>>>> save img fail \n");
} else
printf("\n >>>>>> saveed img %s \n", str);
free(str);
}
cap.release();
} else
printf("---> Failed to open the camera !\n");
[img]https://i.sstatic .net/2oXDvZM6.jpg[/img]
Запуск v4l2-ctl --device=/dev/video0 --list-formats-ext return
Код: Выделить всё
[root@demo]# v4l2-ctl --device=/dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture Multiplanar
[0]: 'RG10' (10-bit Bayer RGRG/GBGB)
Size: Stepwise 64x64 - 2304x1296 with step 8/8
[1]: 'BA10' (10-bit Bayer GRGR/BGBG)
Size: Stepwise 64x64 - 2304x1296 with step 8/8
[2]: 'GB10' (10-bit Bayer GBGB/RGRG)
Size: Stepwise 64x64 - 2304x1296 with step 8/8
[3]: 'BG10' (10-bit Bayer BGBG/GRGR)
Size: Stepwise 64x64 - 2304x1296 with step 8/8
[4]: 'Y10 ' (10-bit Greyscale)
Size: Stepwise 64x64 - 2304x1296 with step 8/8
p>
Я тоже это пробовал:
Код: Выделить всё
cv::Mat bgr(disp_height, disp_width, modes[i]);
cap >> bgr;
cv::cvtColor(bgr, frame, cv::COLOR_BGR2RGB);
Подробнее здесь: https://stackoverflow.com/questions/791 ... ith-opencv