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
功能: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 }
測試文件: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 }
運行結果:

