MIPI Camera

How To Connect MIPI Camera

Attaching a camera for the first-time to VIM3’s MIPI-CSI header? Refer to this picture:

Note

The reverse connection will burn the camera, please check the connection of the picture carefully before connecting

User MIPI Camera via Guvcview

Open Guvcview

The desktop version has Guvcview pre-installed, find and open this software in the software list.

mipi_guvcview_icon.png

Guvcview Setting

The name of the MIPI camera is Juno R2.

The resolution is set to 1920x1080 and the RGB format is BGR3-BGR3.

After the setting is successful, you can use the camera normally.

Test IR-Cut

You can test IR-Cut via v4l2

The test needs to be conducted in the framebuffer mode, and switch to the framebuffer mode through the keyboard combination of Ctrl+Alt+F1.

disable IR-Cut

1
v4l2_test  -c 1 -p 0 -F 0 -f 0 -D 0 -R 1 -r 2 -d 2 -N 1000 -n 800 -w 0 -e 1 -I 0 -b /dev/fb0 -v /dev/video0

enable IR-Cut

1
v4l2_test  -c 1 -p 0 -F 0 -f 0 -D 0 -R 1 -r 2 -d 2 -N 1000 -n 800 -w 0 -e 1 -I 1 -b /dev/fb0 -v /dev/video0

Record Video via Gstreamer

1
$ gst-launch-1.0 v4l2src name=vsrc device=/dev/video0 ! video/x-raw,width=1920,height=1080,framerate=60/1,format=RGB ! filesink location=.//test.rgb

The recorded video is saved intest.rgb.

Use MIPI Camera via opencv

Python

The source code with python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import cv2 

if __name__ == '__main__':

val = True

cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)

fourcc = cv2.VideoWriter_fourcc(*'XVID')

out = cv2.VideoWriter("./test.avi", fourcc, 20.0, (640, 480), True)

while val is True:
ret, frame = cap.read()
cv2.cvtColor(frame,cv2.COLOR_RGB2BGR)
if frame is None:
break
else:
out.write(frame)
cv2.imshow("video", frame)
k = cv2.waitKey(1) & 0xFF
if k == 27:
break

cap.release()
out.release()

C++

The source code with C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <iostream>
#include <string>
using
namespace cv;

using
namespace std;

int main(int argc, char** argv)
{
int count=100;
string str = argv[1];
string res=str.substr(10);
VideoCapture capture(stoi(res));
capture.set(CAP_PROP_FRAME_WIDTH, 1920);
capture.set(CAP_PROP_FRAME_HEIGHT, 1080);
while (count)
{
Mat frame;
capture >> frame;

if (frame.empty()) {
break;
}
int h = frame.rows;
int w = frame.cols;
const char *name = "video";
namedWindow(name, 0);
imshow(name, frame);
waitKey(30);
count--;
}
return 0;
}

compile command:

1
$ gcc -o mipi mipi.cpp -lopencv_imgproc -lopencv_core -lopencv_videoio -lopencv_imgcodecs -lopencv_highgui -std=c++11 -std=gnu++11 -Wall -std=c++11 -lstdc++ -I/usr/include/opencv4

How to run:

1
$ ./test /dev/videoX

Learn More: