最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?結(jié)合?opencv讀取圖片與視頻的方法

 更新時(shí)間:2023年06月28日 10:02:04   作者:小啊磊_Vv  
這篇文章主要介紹了C++?結(jié)合?opencv讀取圖片與視頻,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、安裝opencv

  • 操作系統(tǒng): Linux(采用遠(yuǎn)程服務(wù)器主機(jī)進(jìn)行代碼編寫)
  • 需提前配置(安裝)cmake
  • 遠(yuǎn)程連接服務(wù)器進(jìn)行操作, 直接新建立的終端輸入
sudo apt install libopencv-dev

二 、配置文件準(zhǔn)備

2.1 新建立文件夾

  • 建立一個(gè)新的文件夾,并在文件夾下面建立如下面的子文件夾
  • 其中CMakeLists.txt是txt形式的文件
  • .vscode里面放的是配置文件
  • media放的圖片和視頻
  • output 是輸出的文件夾路徑
  • src 放的是源代碼cpp文件

在這里插入圖片描述

2.2 .vscode文件下配置文件

(1)配置tasks.json文件

{
	"version": "2.0.0",
	"tasks": [
		// 1.cmake 配置
		{
			"type": "cppbuild",
			"label": "cmake配置",
			"command": "cmake",                         // cmake命令
			"args": [
				"-S .",                                 // 源碼目錄
        		"-B build",                             // 編譯目錄
        		"-DCMAKE_BUILD_TYPE=Debug"              // 編譯類型
			],
			"options": {
				"cwd": "${workspaceFolder}"             // 工作目錄
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": "build",
		},
		// 2.cmake 編譯
		{
			"type": "cppbuild",
      		"label": "CMake編譯",
      		"command": "cmake",                // cmake命令
      		"args": [
        		"--build",                     // 編譯
        		"build",                       // 編譯目錄
      		],
      		"options": {
        		"cwd": "${workspaceFolder}"    // 工作目錄
      		},
      		"problemMatcher": [
        		"$gcc"
      		],
      		"group": "build",
      		"dependsOn": [
        		"CMake配置"                    // 依賴CMake配置,先執(zhí)行CMake配置
      		]
		},
		// 3.刪除build目錄
		{
			"type": "shell",
			"label": "刪除build目錄",
			"command": "rm -rf build",
			"options": {
				"cwd": "${workspaceFolder}"     // 工作目錄
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": "build",	
		},
		// 4.運(yùn)行可執(zhí)行文件
		{
			"label": "運(yùn)行可執(zhí)行文件",
			"type": "shell",
			"command": "./build/demo_${fileBasenameNoExtension}",
			"problemMatcher": [],
			"group": {
				"kind": "build",
				"isDefault": true
			},
			"options": {
				"cwd": "${workspaceFolder}"   
			},
			"dependsOn": [
				"cmake構(gòu)建"
			]
		}
	]
}

(1)配置launch.json

{
    // 使用 IntelliSense 了解相關(guān)屬性。 
    // 懸停以查看現(xiàn)有屬性的描述。
    // 欲了解更多信息,請(qǐng)?jiān)L問(wèn): https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C++ Cmake Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/demo_${fileBasenameNoExtension}",    // 編譯后的程序,需要結(jié)合CMakeLists.txt中的add_executable()函數(shù)
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "CMake編譯"
        }
    ]
}

三 、src文件下代碼編寫

3.1 圖片的讀取和顯示(代碼文件:1.img.cpp)

  • 在導(dǎo)入 #include"opencv2/opencv.hpp" 會(huì)出現(xiàn)錯(cuò)誤, 鼠標(biāo)點(diǎn)擊頭文件并按住ctrl鍵,界面會(huì)出現(xiàn)配置,添加配置即可, 配置文件自動(dòng)生成放在.vscode文件下。
  • 由于是遠(yuǎn)程服務(wù)器主機(jī), 所以無(wú)法顯示圖片,只能另存為。
// 圖片的讀取和顯示
// 導(dǎo)入 opencv 頭文件
#include"opencv2/opencv.hpp"
#include<iostream>
int main(int argc, char** argv)
{
    // 讀取圖片
    // 讀取的數(shù)據(jù)保存在 Mat 類型的變量 image 中, Mat是 opencv 中的圖像數(shù)據(jù)結(jié)構(gòu),類似 numpy 中的 ndarray
    cv :: Mat image = cv :: imread("./media/cat.jpg");
    // 判斷圖片是否讀取成功, 讀取不成功, 運(yùn)行 if 語(yǔ)句直接退出主函數(shù)
    if(image.empty())
    {
        std :: cout << "Could not read the image: " << std :: endl;
        return 1;
    }
    // 打印圖片寬度和高度
    std :: cout << "圖片高度: " << image.rows << "圖片寬度: " << image.cols << std :: endl;
    // 打印圖片數(shù)據(jù)
    // 以 numpy 的方式打印
    std :: cout << "圖片的 data: " << cv :: format(image, cv :: Formatter :: FMT_NUMPY) << std :: endl;
    // 以 python list 格式輸出
    std :: cout << "圖片的 data: " << cv :: format(image, cv :: Formatter :: FMT_PYTHON) << std :: endl;
    // 創(chuàng)建一個(gè)gray 圖
    cv :: Mat gray;
    // 創(chuàng)建一個(gè) hsv 圖
    cv :: Mat hsv;
    // 創(chuàng)建一個(gè) rgb 圖
    cv :: Mat rgb;
    // BGR --> Gray
    cv :: cvtColor(image, gray, cv :: COLOR_BGR2GRAY);
    // BGR --> HSV
    cv :: cvtColor(image, hsv, cv :: COLOR_BGR2HSV);
    // BGR --> RGB
    cv :: cvtColor(image, rgb, cv :: COLOR_BGR2RGB);
    // 保存 gray 圖: 格式: (文件路徑, Mat 矩陣變量)
    cv :: imwrite("./output/gray.jpg", gray);
    // 顯示圖片
    // cv :: imshow("圖片", image);
    // 等待按鍵
    // cv :: waitKey(0);
    // 顯示多張圖片, 同時(shí)出現(xiàn)在兩個(gè)窗口
    // cv :: imshow("原圖", image);
    // cv :: imshow("灰度圖", gray);
    // cv :: waitKey(0);
    return 0;
}

3.2 視頻流的讀?。ùa文件:2.video.cpp)

// opencv 讀取視頻流
#include"opencv2/opencv.hpp"
#include<iostream>
#include<gflags/gflags.h>                            // 導(dǎo)入 gflags 庫(kù)
int main(int argc, char **argv)
{
    // 解析命令行參數(shù)
    gflags :: ParseCommandLineFlags(&argc, &argv, true);
    // 創(chuàng)建一個(gè) VideoCapture 對(duì)象, 參數(shù)為視頻路徑
    cv :: VideoCapture capture("./media/dog.mp4");
    // 判斷視頻是否讀取成功, 返回 True 表示成功
    if(!capture.isOpened())
    {
        std :: cout << "無(wú)法讀取視頻" << std :: endl;
        return 1;
    }
    // 讀取視頻幀, 使用 Mat 類型的 frame 存儲(chǔ)返回的幀
    cv :: Mat frame;
    // 定義灰度圖
    cv :: Mat gray;
    // 循環(huán)讀取視頻
    while(true)
    {
        // 讀取視頻幀, 使用 >> 運(yùn)算符 或者 read()函數(shù), 他的參數(shù)是返回的幀
        capture.read(frame);
        // capture >> frame;
        // 判斷是否讀取成功
        if(frame.empty())
        {
            std :: cout << "文件讀取完畢: " << std :: endl;
            break;
        }
        // 將視頻的幀轉(zhuǎn)為灰度圖
        cv :: cvtColor(frame, gray, cv :: COLOR_BGR2GRAY);
        // 顯示視頻幀
        cv :: imshow("raw demo", frame);
        cv :: imshow("gray demo", gray);
        // 等待按鍵, 延遲 30ms, 否則視頻播放太快
        int k = cv :: waitKey(30);
        // 按下Esc鍵退出
        if(k == 27)
        {
            std :: cout << "退出" << std :: endl;
            break;
        }
    }
    return 0;
}

3.3 視頻流的讀取并保存(代碼文件:3.write.cpp)

// opencv 讀取視頻流
#include"opencv2/opencv.hpp"
#include<iostream>
#include<gflags/gflags.h>                            // 導(dǎo)入 gflags 庫(kù)
int main(int argc, char **argv)
{
    // 解析命令行參數(shù)
    gflags :: ParseCommandLineFlags(&argc, &argv, true);
    // 創(chuàng)建一個(gè) VideoCapture 對(duì)象, 參數(shù)為視頻路徑
    cv :: VideoCapture capture("./media/dog.mp4");
    // 判斷視頻是否讀取成功, 返回 True 表示成功
    if(!capture.isOpened())
    {
        std :: cout << "無(wú)法讀取視頻" << std :: endl;
        return 1;
    }
    int frame_width = capture.get(cv :: CAP_PROP_FRAME_WIDTH);
	int frame_height = capture.get(cv :: CAP_PROP_FRAME_HEIGHT);
	double fps = capture.get(cv :: CAP_PROP_FPS);
    std :: cout << "圖像寬度: " << frame_width << std :: endl;
    std :: cout << "圖像高度: " << frame_height << std :: endl;
    std :: cout << "圖像幀率: " << fps << std :: endl;
    // 讀取視頻幀, 使用 Mat 類型的 frame 存儲(chǔ)返回的幀
    cv :: Mat frame;
    // 定義灰度圖
    cv :: Mat gray;
    //寫入MP4文件,參數(shù)分別是:文件名,編碼格式,幀率,幀大小 
    cv::VideoWriter writer("./output/record.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, cv::Size(frame_width, frame_height));
    // 循環(huán)讀取視頻
    while(true)
    {
        // 讀取視頻幀, 使用 >> 運(yùn)算符 或者 read()函數(shù), 他的參數(shù)是返回的幀
        capture.read(frame);
        // capture >> frame;
        // 判斷是否讀取成功
        if(frame.empty())
        {
            std :: cout << "文件讀取完畢: " << std :: endl;
            break;
        }
        // std :: cout << "圖片高度: " << frame.rows << "圖片寬度: " << frame.cols << std :: endl;
        // 將視頻的幀轉(zhuǎn)為灰度圖
        cv :: cvtColor(frame, gray, cv :: COLOR_BGR2GRAY);
        // 將 gray 寫入 
        writer.write(frame);
    }
    return 0;
}

四、cmake配置

在CMakeLists.txt文件中進(jìn)行配置
# 最低版本要求
cmake_minimum_required(VERSION 3.10)
# 項(xiàng)目信息
project(opencv_demo)
# 使用find_package命令查找OpenCV庫(kù)
find_package(OpenCV REQUIRED)
find_package(gflags REQUIRED)
if (OpenCV_FOUND)
    message(STATUS "OpenCV library status:")
    message(STATUS "    version: ${OpenCV_VERSION}")
    message(STATUS "    libraries: ${OpenCV_LIBS}")
    message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
else()
    message(FATAL_ERROR "Could not find OpenCV library")
endif()
# 添加頭文件
include_directories(${OpenCV_INCLUDE_DIRS} ${gflags_INCLUDE_DIRS})
# 鏈接庫(kù)
link_libraries(${OpenCV_LIBS} ${gflags_LIBRARIES})
# 添加可執(zhí)行文件
add_executable(demo_1.img src/1.img.cpp)
add_executable(demo_2.video src/2.video.cpp)
add_executable(demo_3.write src/3.write.cpp)

五、運(yùn)行

運(yùn)行1.img.cpp,終端選項(xiàng) – 運(yùn)行任務(wù)

在這里插入圖片描述

會(huì)出現(xiàn)下列界面, 依次點(diǎn)擊 刪除 build目錄表,在選擇終端 – 運(yùn)行任務(wù) – cmake 配置,結(jié)束后,在點(diǎn)擊終端 – 運(yùn)行任務(wù) – CMake 編譯

在這里插入圖片描述

上述過(guò)程結(jié)束后,就會(huì)正常運(yùn)行與輸出1.img.cpp
輸出后結(jié)果如圖所示, 主要看 output 文件夾,可能和我下面不一樣,因?yàn)槲矣衷趯懫渌拇a

在這里插入圖片描述

到此這篇關(guān)于C++ 結(jié)合 opencv讀取圖片與視頻的文章就介紹到這了,更多相關(guān)C++ 讀取圖片與視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言中整數(shù)與浮點(diǎn)數(shù)的內(nèi)存存儲(chǔ)區(qū)別解析

    C語(yǔ)言中整數(shù)與浮點(diǎn)數(shù)的內(nèi)存存儲(chǔ)區(qū)別解析

    在C語(yǔ)言編程中,理解數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式是深入掌握編程基礎(chǔ)的關(guān)鍵,本文將深入探討整數(shù)和浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)機(jī)制,包括原碼、反碼、補(bǔ)碼、IEEE 754標(biāo)準(zhǔn)等核心概念,并通過(guò)實(shí)際示例幫助讀者徹底理解這些重要的底層原理,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • C語(yǔ)言實(shí)現(xiàn)Flappy Bird小游戲

    C語(yǔ)言實(shí)現(xiàn)Flappy Bird小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)Flappy Bird小游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Qt讀寫XML文件的方法詳解(含源碼+注釋)

    Qt讀寫XML文件的方法詳解(含源碼+注釋)

    XML文件可以用來(lái)存儲(chǔ)項(xiàng)目中的數(shù)據(jù),它相當(dāng)于一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于Qt讀寫XML文件(含源碼+注釋)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • C語(yǔ)言實(shí)現(xiàn)選票統(tǒng)計(jì)

    C語(yǔ)言實(shí)現(xiàn)選票統(tǒng)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)選票統(tǒng)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++ 如何使用RapidJson 寫入文件

    C++ 如何使用RapidJson 寫入文件

    RapidJSON 是只有頭文件的 C++ 庫(kù), 不需要編譯, 可以直接在項(xiàng)目中使用, 只需把 include/rapidjson 目錄復(fù)制至系統(tǒng)或項(xiàng)目的 include 目錄即可,下面給大家分享C++ 如何使用RapidJson 寫入文件,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • QString使用正則操作的接口實(shí)現(xiàn)

    QString使用正則操作的接口實(shí)現(xiàn)

    這篇文章主要介紹了QString使用正則操作的接口實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • c++如何分割字符串示例代碼

    c++如何分割字符串示例代碼

    因?yàn)閏++字符串沒(méi)有split函數(shù),所以字符串分割單詞的時(shí)候必須自己手寫,也相當(dāng)于自己實(shí)現(xiàn)一個(gè)split函數(shù)吧!下面跟小編一起來(lái)看看如何實(shí)現(xiàn)這個(gè)功能。
    2016-08-08
  • 弦圖ZOJ 1015 Fishing Net 判定方法

    弦圖ZOJ 1015 Fishing Net 判定方法

    弦圖,算法完全按照CDQ的PPT上給的最大勢(shì)算法(MCS)完美消除序列..需要的朋友可以參考下
    2012-11-11
  • OpenCV數(shù)字圖像處理基于C++之圖像形態(tài)學(xué)處理詳解

    OpenCV數(shù)字圖像處理基于C++之圖像形態(tài)學(xué)處理詳解

    OpenCV是一款由Intel公司俄羅斯團(tuán)隊(duì)發(fā)起并參與和維護(hù)的一個(gè)計(jì)算機(jī)視覺(jué)處理開(kāi)源軟件庫(kù),支持與計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)相關(guān)的眾多算法,下面這篇文章主要給大家介紹了關(guān)于OpenCV數(shù)字圖像處理基于C++之圖像形態(tài)學(xué)處理的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • C++中map和set的使用及示例

    C++中map和set的使用及示例

    map和set是STL容器中的部分,本文主要介紹了C++中map和set的使用小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01

最新評(píng)論

康保县| 彭山县| 宣武区| 惠水县| 建湖县| 黄浦区| 衡阳市| 南安市| 永平县| 鹿邑县| 德钦县| 威海市| 常德市| 张掖市| 昌吉市| 深泽县| 莆田市| 武夷山市| 民权县| 永康市| 弋阳县| 禹州市| 正阳县| 阿拉善右旗| 牟定县| 双桥区| 兰考县| 克什克腾旗| 搜索| 延津县| 泾阳县| 鞍山市| 和静县| 延寿县| 哈密市| 达孜县| 兴化市| 台中市| 肇庆市| 龙门县| 贡觉县|