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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
功能:LearnCV.cpp
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
测试文件:Main.cpp
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
运行结果: