#使用命令測試c++
gst-launch-1.0 nvcamerasrc ! 'video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)I420, framerate=(fraction)60/1' ! nvvidconv ! 'video/x-raw(memory:NVMM), format=(string)I420' ! nvoverlaysink -e
安裝支持Gsteramer的opencv
刪除OpenCV4Tegra: 若是已經安裝了系統自帶的opencv 須要先進行卸載:git
sudo apt-get purge libopencv4tegra-dev libopencv4tegra sudo apt-get purge libopencv4tegra-repo sudo apt-get update
下載Jetson TX2 OpenCV安裝程序:github
git clone https://github.com/jetsonhacks/buildOpenCVTX2.git cd buildOpenCVTX2
打開buildOpenCV.sh
並將 -DWITH_GSTREAMER = OFF
更改成-DWITH_GSTREAMER = ON
,確保OpenCV編譯時使用gstreamer支持。 構建OpenCV:app
./buildOpenCV.sh cd 〜/opencv /build sudo make install
測試程序
#include <opencv2/opencv.hpp> std::string get_tegra_pipeline(int width, int height, int fps) { return "nvcamerasrc ! video/x-raw(memory:NVMM), width=(int)" + std::to_string(width) + ", height=(int)" + std::to_string(height) + ", format=(string)I420, framerate=(fraction)" + std::to_string(fps) + "/1 ! nvvidconv flip-method=2 ! video/x-raw, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink"; } int main() { // Options int WIDTH = 1920; int HEIGHT = 1080; int FPS = 30; // Define the gstream pipeline std::string pipeline = get_tegra_pipeline(WIDTH, HEIGHT, FPS); std::cout << "Using pipeline: \n\t" << pipeline << "\n"; // Create OpenCV capture object, ensure it works. cv::VideoCapture cap(pipeline, cv::CAP_GSTREAMER); if (!cap.isOpened()) { std::cout << "Connection failed"; return -1; } // View video cv::Mat frame; while (1) { cap >> frame; // Get a new frame from camera // Display frame imshow("Display window", frame); cv::waitKey(1); //needed to show frame } }
Makefile
# build mipi opencv test CC = g++ CFLAGS = -w -O3 -std=c++11 SRCS = main.cpp INC += -I /usr/include INC += -I `pkg-config --cflags opencv` LIBS += -L /usr/lib/ -lstdc++ LIBS += `pkg-config --libs opencv` TARGET = test target: $(CC) $(CFLAGS) -o $(TARGET) $(SRCS) $(INC) $(LIBS) #*****************finished building***************** clean: rm -f $(TARGET)