日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OpenCV】Qt + OpenCV 开发配置 + 入门知识(代码示例)

發(fā)布時間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OpenCV】Qt + OpenCV 开发配置 + 入门知识(代码示例) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

前言?

一、OpenCV簡介

二、OpenCV + QT 開發(fā)環(huán)境搭建

🚀資源下載

三、OpenCV圖像原理

🌭位圖模式?

🌭灰度模式

🌭RGB模式

四、OpenCV基礎圖像操作

🍔讀圖像

🍔顯示圖片?

🍔保存圖片

🍔Mat類

🍔像素

五、案例實現(xiàn)?

🌈毛玻璃效果

🌈高斯模糊

🌈XY軸模糊

🌈中值濾波

🌈灰度處理

🌈視頻獲取

🌈攝像頭調用

?六、總結


前言?

本文主要學習 Windows下?Qt + OpenCV?的開發(fā)環(huán)境的相關配置,以及OpenCV入門相關案例

包括 OpenCV圖像原理、基礎圖像操作、案例實現(xiàn)

一、OpenCV簡介

  • OpenCV 于1999年由Gary Bradsky在英特爾創(chuàng)立,第一個版本于2000年問世
  • OpenCV 是一個基于開源發(fā)行的跨平臺計算機視覺庫,它實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法,已成為計算機視覺領域最有力的研究工具
  • OpenCV 由一系列 C函數(shù) 和 少量C++類構成,也有提供其他語言的接口,例如,支持python、matlab等語言

應用領域:?

  • 包括在衛(wèi)星和網(wǎng)絡地圖上拼接圖像,圖像掃描校準,醫(yī)學圖像的降噪,目標分析,安保以及工業(yè)檢測系統(tǒng),自動駕駛和安全系統(tǒng),制造感知系統(tǒng),相機校正,軍事應用,無人空中、地面、水下航行器

生活中的例子:

  • 像我們的短視頻、直播上面的一些特效、美顏,現(xiàn)在比較火的無人快遞車、汽車自動駕駛等,還有我們出行最常見的地鐵站 ,用于疫情防控的人臉識別測溫等等

概念區(qū)分:

  • 圖像處理側重于 “處理” 圖像,如增強,還原,去噪,分割等等
  • 計算機視覺重點在于使用計算機來模擬人的視覺,因此模擬才是計算機視覺領域的最終目標

二、OpenCV + QT 開發(fā)環(huán)境搭建

🚀資源下載

下載鏈接:win10-opencv-Qt-WindowsServer文檔類資源-CSDN下載?

首先,預設值一個存放QT工程文件的文件夾,博主文件名為?QT-project?,如下圖所示:

PS:千萬不能有中文或者空格

然后,將46個.dll文件(除了.exe文件)拷貝一份到以下路徑 C:\Windows\SysWOW64?

Qt工程配置

這是博主使用的QT版本,如下圖所示:

本文OpenCV學習均使用C++進行編譯,Qt創(chuàng)建工程操作如下:?

設置工程名字,這邊的創(chuàng)建路徑就是上文創(chuàng)建的?QT-project?,然后持續(xù)點擊下一步,完成創(chuàng)建

在?.pro文件?下,添加如下,路徑可根據(jù)自己設定的位置進行修改:

INCLUDEPATH += D:\QT-project\opencv_3.4.2_Qt/include LIBS += D:\QT-project\opencv_3.4.2_Qt/x86/bin/libopencv_*.dll

Ctrl+s 保存后,主函數(shù)導入相關頭文件進行測試,效果如下圖,出現(xiàn) Hello Word! 即為測試成功!

#include <opencv2/opencv.hpp>using namespace cv;

以上,即為 Qt + OpenCV 開發(fā)環(huán)境開發(fā)的全部內容啦,下面進入到相關的知識介紹以及案例實現(xiàn)

三、OpenCV圖像原理

  • 在計算機看來,圖像只是一些亮度各異的點
  • 一副M*N的圖片可以用M*N的矩陣來表示,矩陣的值表示這個位置上像素的亮度,他可以被表示為多種模式

  • 位圖模式
  • 灰度模式
  • RGB模式

🌭位圖模式?

  • 位圖模式是1位深度的圖像,它只是黑和白兩種顏色
  • 它可以由掃描或置入黑色的矢量線條圖像生成,也能由灰度模式轉換而成
  • 其他圖像模式不能直接轉換為位圖模式

0

1

1

0

。。。

1

0

1

1

。。。

0

0

0

1

。。。

1

0

1

0

。。。

🌭灰度模式

  • 灰度模式是8位深度的圖像模式
  • 在全黑和全白之間插有254個(2^8)灰度等級的顏色來描繪灰度模式的圖像
  • 所有模式的圖像都能換成灰度模式

0

98

1

98

。。。

1

78

25

68

。。。

123

56

57

41

。。。

206

33

13

51

。。。

🌭RGB模式

  • RGB模式是數(shù)碼圖像中最重要的一個模式,它不是用數(shù)碼而是用電平來描述的
  • 掃描儀和數(shù)碼相機都是捕捉RGB圖像信息的
  • RGB模式是24位顏色深度。它共有三個通道,每個通道都有8位深度
  • 三個通道合成一起可生成1677萬種顏色,我們也稱之謂 “真彩色”

四、OpenCV基礎圖像操作

🍔讀圖像

功能:載入一張圖片

函數(shù)原型:Mat cv::imread(char filename,int flag);

返回值:Mat 可以理解為一個存儲數(shù)據(jù)的容器,定義了一個img對象來存圖片的數(shù)據(jù)?

參數(shù):

參數(shù)1:圖片路徑名

參數(shù)2:

????????cv::IMREAD_COLOR:讀入一副彩色圖像。圖像的透明度會被忽略,默認參數(shù)可寫成1?

????????cv::IMREAD_GRAYSCALE:以灰度模式讀入圖像可以寫成 0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????cv::IMREAD_UNCHANGED:讀入一幅圖像,并且包括圖像的 alpha 通道,可以寫成-1

🍔顯示圖片?

功能:顯示一張圖片

函數(shù)原型:void cv::imshow(const String&vinname,InputArry mat);

返回值: ? 無類型

參數(shù): ?

參數(shù)1:顯示的窗口名,可以使用cv::namedWindow函數(shù)創(chuàng)建窗口,如不創(chuàng)建,imshow函數(shù)自動創(chuàng)建? ?

參數(shù)2:需要顯示的圖像

🍔保存圖片

功能:保存一張圖片到指定的文件

函數(shù)原型:bool ?cv::imwrite(const String& filename, InputArry mat,?

? ? ? ? ? ? ? ? ? const std::vector<int>&params=std::vector<int>());

返回值: ? bool類型

參數(shù): ?

參數(shù)1:圖片名稱.圖片格式 ?

參數(shù)2:Mat類型的圖像數(shù)據(jù) ?

參數(shù)3:特定格式保存的參數(shù)編碼,默認值為 std::vector<int>();一般可以不寫

🍔Mat類

Mat類:是 OpenCV 用于處理圖像而引入的一個封裝類,他是一個自動內存管理工具

Mat:本質上是由兩個數(shù)據(jù)部分組成的類

  • 包含信息有矩陣的大小,用于存儲的方法,矩陣存儲的地址等,?矩陣頭和一個指針
  • 指向包含了像素值的矩陣(可根據(jù)選擇用于存儲的方法采用任何維度存儲數(shù)據(jù))
  • 矩陣頭部的大小是恒定的
  • 矩陣本身的大小因圖像的不同而不同,通常是較大的數(shù)量級圖像矩陣比較耗時

🍔像素

  • 是指由圖像的小方格組成的,這些小方格都有一個明確的位置和被分配的色彩數(shù)值,小方格顏色和位置就決定該圖像所呈現(xiàn)出來的樣子
  • 像素點不可再分割成更小的單位或元素
  • 一張圖片就是由很多個像素點組成的,如果圖片大小為25*25,那么這張圖片就是由625個像素點組成,一行有25個像素點,一共25列
  • 一張圖片所有的像素點存在MAT矩陣中,MAT(i,j)的值就是當前像素點的值

五、案例實現(xiàn)?

🌈毛玻璃效果

代碼實現(xiàn)

#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv;//毛玻璃特效 Mat imgeGalss(Mat &img) {RNG rng;int random = 0;int num = 5;for(int i = 0;i<img.rows - num;i++){for (int j=0;j<img.cols - num;j++){random = rng.uniform(0,num);//三通道img.at<Vec3b>(i,j)[0] = img.at<Vec3b>(i+random,j+random)[0];img.at<Vec3b>(i,j)[1] = img.at<Vec3b>(i+random,j+random)[1];img.at<Vec3b>(i,j)[2] = img.at<Vec3b>(i+random,j+random)[2];}}return img; }int main(int argc, char *argv[]) {Mat img = imread("C:/Users/86177/Desktop/image/dog.jpg");//圖片路徑//處理前imshow("img",img);//顯示圖片//處理后的Mat resimg = imgeGalss(img);//毛玻璃imshow("resimg",resimg);//顯示圖片waitKey(0);//等待按鍵return 0; }

🌈高斯模糊

代碼實現(xiàn)?

#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv;int main(int argc, char *argv[]) {Mat img = imread("C:/Users/86177/Desktop/image/dog.jpg");//圖片路徑//處理前imshow("img",img);//顯示圖片Mat resimg;//高斯模糊cv::GaussianBlur(img,resimg,Size(5,5),0);imshow("resimg",resimg);//顯示圖片waitKey(0);//等待按鍵return 0; }

🌈XY軸模糊

代碼實現(xiàn)??

#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv;int main(int argc, char *argv[]) {Mat img = imread("C:/Users/86177/Desktop/image/dog.jpg");//圖片路徑//處理前imshow("img",img);//顯示圖片Mat resimg;//XY軸模糊cv::blur(img,resimg,Size(10,10));imshow("resimg",resimg);//顯示圖片waitKey(0);//等待按鍵return 0; }

🌈中值濾波

代碼實現(xiàn)??

#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv;int main(int argc, char *argv[]) {Mat img = imread("C:/Users/86177/Desktop/image/dog.jpg");//圖片路徑//處理前imshow("img",img);//顯示圖片Mat resimg;//中值濾波cv::medianBlur(img,resimg,5);imshow("resimg",resimg);//顯示圖片waitKey(0);//等待按鍵return 0; }

🌈灰度處理

代碼實現(xiàn)

#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv;int main(int argc, char *argv[]) {Mat img = imread("C:/Users/86177/Desktop/image/dog.jpg");//圖片路徑//處理前imshow("img",img);//顯示圖片Mat resimg;//灰度處理cvtColor(img,resimg,CV_BGR2GRAY);imshow("resimg",resimg);//顯示圖片waitKey(0);//等待按鍵return 0; }

🌈視頻獲取

代碼實現(xiàn)??

#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv;int main(int argc, char *argv[]) { Mat frame;VideoCapture cap("C:/Users/86177/Desktop/image/ren.mp4");//視頻獲取while (cap.read(frame)) {imshow("frame",frame);waitKey(24); }return 0; }

🌈攝像頭調用

代碼實現(xiàn)??

#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv;int main(int argc, char *argv[]) { Mat frame;VideoCapture cap(0);//攝像頭調用while (cap.read(frame)) {imshow("frame",frame);waitKey(24); }return 0; }

?六、總結

  • OpenCV 在機器視覺,圖像處理這方面經(jīng)常用到,特別是疫情當下,用于我們日常生活中的人臉體溫檢測,真的深有體會,目前,人臉識別的市場還是相當廣闊的!
  • 博主也會繼續(xù)學習這塊內容,多嘗試做一些有意思的 demo!

以上就是本文的全部內容啦!如果對您有幫助,麻煩點贊啦!收藏啦!歡迎各位評論區(qū)留言!!!

總結

以上是生活随笔為你收集整理的【OpenCV】Qt + OpenCV 开发配置 + 入门知识(代码示例)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。