Ubuntu Python3 OpenCV3.2 on SBC with 5MPx camera

asked 2018-05-22 10:20:21 -0600

denevs gravatar image

I worked with OpenCV 3.2 with Python3 and SBC OXU4. I have a true 5MPx web-camera connected to SBC. I want to take from this camera 2592x1944 resolution picture. If I use Cheese I can take picture with this resolution. I can save pictures with command line program streamer -t 4 -r 4 -s 2592x1944 -o b0.jpeg But when I take picture with OpenCV3.2 like this:

#!/usr/bin/env python3
import cv2
import os
import time
capture1 = cv2.VideoCapture(2)
if capture1.isOpened():
   capture1.set(3, 2592)
   capture1.set(4, 1944)
   s, img = capture1.read()
   if not img.all():
      cv2.imwrite('test1.jpg', img)
      print('image done!')
else:
  print('cant open camera')

I will see 1920x1080 photo resolution. Also I have inspected v4l2-ctls

v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index       : 0
Type        : Video Capture
Pixel Format: 'YUYV'
Name        : YUYV 4:2:2
Size: Discrete 2592x1944
    Interval: Discrete 0.267s (3.750 fps)
Size: Discrete 1920x1080
    Interval: Discrete 0.133s (7.500 fps)
Size: Discrete 1280x960
    Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 1280x720
    Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 640x480
    Interval: Discrete 0.017s (60.000 fps)
    Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
    Interval: Discrete 0.008s (120.000 fps)
    Interval: Discrete 0.011s (90.000 fps)
    Interval: Discrete 0.017s (60.000 fps)
    Interval: Discrete 0.033s (30.000 fps)

    Index       : 1
    Type        : Video Capture
Pixel Format: 'MJPG' (compressed)
Name        : Motion-JPEG
Size: Discrete 1920x1080
    Interval: Discrete 0.033s (30.000 fps)
    Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 1280x720
    Interval: Discrete 0.022s (45.000 fps)
    Interval: Discrete 0.033s (30.000 fps)
    Interval: Discrete 0.067s (15.000 fps)
Size: Discrete 640x480
    Interval: Discrete 0.033s (30.000 fps)
    Interval: Discrete 0.067s (15.000 fps)

Active camera settings

v4l2-ctl --all
Driver Info (not using libv4l2):
Driver name   : uvcvideo
Card type     : oCam
Bus info      : usb-12110000.usb-1
Driver version: 4.14.37
Capabilities  : 0x84200001
Video Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps   : 0x04200001
Video Capture
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height      : 1920/1080
Pixel Format      : 'MJPG'
Field             : None
Bytes per Line    : 0
Size Image        : 10077696
Colorspace        : Default
Transfer Function : Default (maps to Rec. 709)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization      : Default (maps to Full Range)
Flags             : 
Crop Capability Video Capture:
Bounds      : Left 0, Top 0, Width 1920, Height 1080
Default     : Left 0, Top 0, Width 1920, Height 1080
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 1920, Height 1080
Selection: crop_bounds, Left 0, Top 0, Width 1920, Height 1080
Streaming Parameters Video Capture:
Capabilities     : timeperframe
Frames per second: 30.000 (30/1)

In fact I see that we have default settings as MJPG 1920X1080. After that I tried to use v4l2-ctl --set-fmt-video=width=2592,height=1936,pixelformat=YUYV and with v4l2-ctl --all I saw that params are sets to:

Driver name   : uvcvideo 
Card type     : oCam
Bus info      : usb-12110000 ...
(more)
edit retag flag offensive close merge delete

Comments

Problem solved. I deleted precompiled opencv from apt-get, then rebuild it from source with -D WITH_V4L=ON

denevs gravatar imagedenevs ( 2018-05-23 06:32:09 -0600 )edit