OpenCV 学习笔记(1)


大纲

1.OpenCV环境搭建

2.存在问题

3.编写测试代码 C++

1.OpenCV环境搭建

  1. 下载5.1 并压缩到相应路径: https://opencv.org/

               

      2.下载VS Community 2019并安装,安装时候勾选window框中的C++组件

      3. 配置环境变量

         

添加opencv可执行文件路径,根据你自己opencv放置位置选择。我放在F盘。

4. Visual studio community

创建 控制台,配置visual stdio OpenCV头文件和相应库文件,以及可执行文件

2.存在问题

由于找不到opencv_world***d.dl,无法继续执行代码。重新安装程序可能会解决此问题。

关于opencv使用imshow函数闪退解决方法等问题

解决措施,将该目录下面的缺失文件复制到放到visual studio 工程目录下x64(x86)下

的debug位置即可。

3.编写测试代码

(1)显示图片和文字

#include 
#include            //调用OpenCV核心库
#include      //调用highgui.hpp库,就是使用imread等
using namespace cv;
using namespace std;
int main()
{
	std::cout << "hello world" << endl;
	Mat img = imread("C:\\bg.jpg");   //创建矩阵matrix=读取文件  \\ 
	namedWindow("photo");             //创建一个窗口
	imshow("photo", img);             //在窗口中展示图片 image show in window
	waitKey(10000);                   //等待键盘输入10s
	return 0;
}

(2)创建400x400的矩阵,每个矩阵赋值为0,单通道。

 m.data 是该矩阵的首地址,

其中

      *(m.data + m.step[0] * row + m.step[1] * col)=255,就是对该矩阵中的某一元素填充相应的值

      该程序的效果就是RGB不是由0-255色域,则RGB在该色域内会变换,0就是黑色,255就是白色。

#include "iostream.hpp"
#include "opencv2/opencv.hpp"

using std::cout;
using std::endl;
using cv::Mat;
using cv::Scalar;
using cv::imshow;

int main()
{
    Mat m(400, 400, CV_8U, Scalar(0));    //创建400x400的矩阵matrix CV_8UC1

    for (int col = 0; col < 400; col++)
    {
        for (int row = 195; row < 205; row++)
        {
            cout << (int)(*(m.data + m.step[0] * row + m.step[1] * col)) << "==>";
            *(m.data + m.step[0] * row + m.step[1] * col) = 255;
            cout << (int)(*(m.data + m.step[0] * row + m.step[1] * col)) << endl;
        }
    }
    imshow("canvas", m);
    cv::waitKey();
    return 0;
}

(3)调用摄像头

#include   //调用C++基本库
#include

using namespace cv;
using namespace std;

int main()
{
    Mat in_frame, out_frame;
    const char win1[] = "Grabbing...";
    const char win2[] = "Recoding...";
    double fps = 30;         //帧频率
    VideoCapture inVid(0);      //定义结构体变量,打开电脑自带的相机
    char file_out[] = "recorded avi";


    int width = (int)inVid.get(CAP_PROP_FRAME_WIDTH);
    int height = (int)inVid.get(CAP_PROP_FRAME_HEIGHT);
    VideoWriter recVid(file_out,VideoWriter::fourcc('M', 'S', 'V', 'C'), fps, Size(width, height));

    if (!inVid.isOpened())
    {
        cout << "Error! Camara not ready...\n";
        return -1;
    }
    namedWindow(win1);
    namedWindow(win2);
    while (1)
    {
        inVid >> in_frame;       //将inVid内容传入in_frame中

        imshow("Video", in_frame);
        cvtColor(in_frame, out_frame, COLOR_BGR2GRAY);
        
        imshow(win1, in_frame); //在窗口中显示帧
        imshow(win2, out_frame); //在窗口中显示帧

        if (waitKey(1000 / fps) >= 0)  //设置显示频率
            break;

    }
    inVid.release();   //释放视频文件或视频设备
    return 0;

}

未完待续

时间 : 20211121 20:46:39  

相关