opencv在linux下初体验,编译,打开图片、摄像头调用

2023-10-26

下载opencv
https://github.com/opencv/opencv
点击master,切换到你需要的opencv的tag版本,比如4.4
如果没有cmake,记得安装,如果没有apt或者yum之类的可以安装,那就要源码安装了,记得下载tar.gz之类的源码来编译,不要zip压缩包,zip里面的文件经常含/r/n之类的,就是一般是windows的格式,编译容易报错

下面开始正题:

cmake编译选项

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

如果是交叉编译,或者在一些国产机子上,如鲲鹏/飞腾+麒麟系统上,可能还要加上WITH_WEBP配置,否者可能报libweb*之类的错

 -D WITH_WEBP=OFF

如果编译或之后运行有报gtk之类的错,要安装gtk,也会提示就是

sudo apt-get intsall libgtk2.0-dev

配置完之后,就是麻木的二连了

make
sudo make install

编译完之后,来试试opencv吧,

  1. 打开图片
#include <opencv2/opencv.hpp>
int main()
{
     cv::Mat img=cv::imread("1.jpg",cv::IMREAD_GRAYSCALE);
     if(!img.empty()){
        cv::imshow("1.jpg",img);
        cv::waitKey(0);
     }
     return 0;
 }
~    

cv::IMREAD_GRAYSCALE表示打开为灰度图,可以去掉,加上感受下opencv处理图片的方便

按照我们编译时参数指定的路径,编译参数如下,要按cpp保存,c++11编译

 g++ -g test.cpp  -I /usr/local/include/opencv4/ -std=c++11  -L /usr/local/lib -lopencv_core  -lopencv_highgui -lopencv_imgcodecs

2.打开摄像头

摄像头的代码就不贴了,可以直接用例子源码(videocapture_basic.cpp)
的来测试
路径:

cd samples/cpp/

代码如下

/**

  @file videocapture_basic.cpp

  @brief A very basic sample for using VideoCapture and VideoWriter

  @author PkLab.net

  @date Aug 24, 2016

*/



#include <opencv2/core.hpp>

#include <opencv2/videoio.hpp>

#include <opencv2/highgui.hpp>

#include <iostream>

#include <stdio.h>



using namespace cv;

using namespace std;



int main(int, char**)

{

    Mat frame;

    //--- INITIALIZE VIDEOCAPTURE

    VideoCapture cap;

    // open the default camera using default API

    // cap.open(0);

    // OR advance usage: select any API backend

    int deviceID = 0;             // 0 = open default camera

    int apiID = cv::CAP_ANY;      // 0 = autodetect default API

    // open selected camera using selected API

    cap.open(deviceID, apiID);

    // check if we succeeded

    if (!cap.isOpened()) {

        cerr << "ERROR! Unable to open camera\n";

        return -1;

    }



    //--- GRAB AND WRITE LOOP

    cout << "Start grabbing" << endl

        << "Press any key to terminate" << endl;

    for (;;)

    {

        // wait for a new frame from camera and store it into 'frame'

        cap.read(frame);

        // check if we succeeded

        if (frame.empty()) {

            cerr << "ERROR! blank frame grabbed\n";

            break;

        }

        // show live and wait for a key with timeout long enough to show images

        imshow("Live", frame);

        if (waitKey(5) >= 0)

            break;

    }

    // the camera will be deinitialized automatically in VideoCapture destructor

    return 0;

}

编译

 g++ -g videocapture_basic.cpp  -I /usr/local/include/opencv4/ -std=c++11  -L /usr/local/lib -lopencv_core  -lopencv_highgui -lopencv_imgcodecs  -lopencv_videoio
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

opencv在linux下初体验,编译,打开图片、摄像头调用 的相关文章

随机推荐