c++语言使用Opencv工具--图像读写与显示

1. 图片读图、显示、另存为

int OperateLocalImg()

{

Mat img = imread("tiebaoer.jpg", 0);    // 参数0表示读单通道图像,灰度图

// img = imread("tiebaoer.jpg")

imshow("读图显示", img);

imwrite("./tbe.jpg", img); // 另存为

waitKey(2000);

return 1;

2. 读视频、显示

int PlayLocalVideo()

{

Mat frameImg;

 

// C/C++ OpenCV读取视频与调用摄像头

// 实例化再初始化

VideoCapture capture;

capture.open("qishou.mp4");

// 实例化的同时进行初始化

// VideoCapture capture("qishou.mp4");

 

if (!capture.isOpened())

{

return 0;

}

 

// 获取视频的总帧数

/* long totalFrameNumber = capture.get(CAP_PROP_FRAME_COUNT);

std::cout << "*********" <<totalFrameNumber << "*************" <<std::endl; */

 

// 播放视频:

while (true)

{

// 循环读取帧图像

// capture >> frameImg;

if (capture.read(frameImg))

{

imshow("读取视频帧", frameImg);

waitKey(30);

}

else

break;

 

}

capture.release();

return 1;

}

 

3. 从摄像头取视频流、显示、保存

int GetCameraStream()

{

Mat frameImg;

VideoCapture cap(0); // 参数0,表示从摄像头获取数据

 

if (!cap.isOpened())

{

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

return -1;

}

 

cap >> frameImg;

if (frameImg.empty())

{

std::cerr << "ERROR!Blank frame grabbed\n";

return -1;

}

 

// 写图像,保存在本地。

VideoWriter writer;

bool isColor = (frameImg.type()==CV_8UC3);

int codec = VideoWriter::fourcc('M', 'J', 'P', 'G');

int  fps = 25;

string filename = "./number1.avi";

writer.open(filename, codec, fps, frameImg.size(), isColor);

 

if (!writer.isOpened())

{

std::cerr << "ERROR! Could not open the output video file for write\n";

return -1;

}

 

// 读摄像头视频流,写入文件,同时显示视频。

for(;;)

{

if (!cap.read(frameImg))

{

std::cerr << "ERROR! Blank frame grabbed\n";

break;

}

writer.write(frameImg); // 存

imshow("From Camera", frameImg); // 显

 

// 视频结束条件

if (waitKey(5) >= 0)

{

break;

}

}

 

return 0;

4. 代码文件

头文件:Header1.h

 1 #pragma once
 2 #ifndef LEARNCV_H
 3 #define LEARNCV_H
 4 
 5 // 函数命名采用多个大写开头的单词,动词+形容词+名词的方式命名。
 6 int PlayLocalVideo();        //播放本地视频
 7 int OperateLocalImg();        //本地图像处理
 8 int GetCameraStream();        //保存摄像头视频流
 9 
10 #endif // !LEARNCV_H
View Code

功能:LearnCV.cpp

  1 #include <opencv2\opencv.hpp>
  2 #include <iostream>
  3 #include <string>
  4 using namespace cv;
  5 using namespace std;
  6 
  7 int PlayLocalVideo()
  8 {
  9     Mat frameImg;
 10 
 11     // C/C++ OpenCV读取视频与调用摄像头
 12     // 实例化再初始化
 13     VideoCapture capture;
 14     capture.open("qishou.mp4");
 15     // 实例化的同时进行初始化
 16     // VideoCapture capture("qishou.mp4"); 
 17 
 18     if (!capture.isOpened())
 19     {
 20         return 0;
 21     }
 22 
 23     // 获取视频的总帧数
 24     /* long totalFrameNumber = capture.get(CAP_PROP_FRAME_COUNT);
 25     std::cout << "*********" <<totalFrameNumber << "*************" <<std::endl; */
 26     
 27     // 播放视频:
 28     while (true)
 29     {
 30         // 循环读取帧图像
 31         // capture >> frameImg;
 32         if (capture.read(frameImg))
 33         {
 34             imshow("读取视频帧", frameImg);
 35             waitKey(30);
 36         }
 37         else
 38             break;
 39             
 40     }
 41     capture.release();
 42     return 1;
 43 }
 44 
 45 
 46 int OperateLocalImg()
 47 {
 48     Mat img = imread("tiebaoer.jpg", 0);    // 参数0表示读单通道图像,灰度图
 49     // img = imread("tiebaoer.jpg")
 50     imshow("读图显示", img);
 51     imwrite("./tbe.jpg", img);                // 另存为
 52     waitKey(2000);
 53     return 1;
 54 }
 55 
 56 int GetCameraStream()
 57 {
 58     Mat frameImg;
 59     VideoCapture cap(0);    // 参数0,表示从摄像头获取数据
 60 
 61     if (!cap.isOpened())
 62     {
 63         std::cerr << "ERROR! Unable to open camera\n";
 64         return -1;
 65     }
 66 
 67     cap >> frameImg;
 68     if (frameImg.empty())
 69     {
 70         std::cerr << "ERROR!Blank frame grabbed\n";
 71         return -1;
 72     }
 73 
 74     // 写图像,保存在本地。
 75     VideoWriter writer;
 76     bool isColor = (frameImg.type()==CV_8UC3);
 77     int codec = VideoWriter::fourcc('M', 'J', 'P', 'G');
 78     int  fps = 25;
 79     string filename = "./number1.avi";
 80     writer.open(filename, codec, fps, frameImg.size(), isColor);
 81 
 82     if (!writer.isOpened())
 83     {
 84         std::cerr << "ERROR! Could not open the output video file for write\n";
 85         return -1;
 86     }
 87 
 88     // 读摄像头视频流,写入文件,同时显示视频。
 89     for(;;)
 90     {
 91         if (!cap.read(frameImg))
 92         {
 93             std::cerr << "ERROR! Blank frame grabbed\n";
 94             break;
 95         }
 96         writer.write(frameImg);                //
 97         imshow("From Camera", frameImg);    // 98         
 99         // 视频结束条件
100         if (waitKey(5) >= 0)
101         {
102             break;
103         }
104     }
105 
106     return 0;
107 }
View Code

测试文件:Main.cpp

 1 #include <iostream>
 2 #include <opencv2\opencv.hpp>
 3 #include "Header1.h"
 4 using namespace cv;
 5 
 6 int main()
 7 {
 8     int isVideo, isCamera, isImg;
 9 
10     // 读写图片
11     isImg = OperateLocalImg();
12 
13     // 测试视频读取
14     isVideo = PlayLocalVideo();
15 
16     // 测试摄像头抓取图片
17     isCamera = GetCameraStream();
18     // std::cout << "**************" << std::endl;
19     
20     return 0;
21 }
View Code

运行结果:

posted @ 2019-12-19 14:52  燕芝沛然  阅读(1186)  评论(0编辑  收藏  举报