OpenCV簡介
OpenCV是一個開源的跨平臺計算機視覺庫,它實現了圖像處理和計算機視覺方面的很多通用算法。
應用場景:
????????目標識別:人臉、車輛、車牌、動物;
????????自動駕駛;醫學影像分析;
????????視頻內容理解分析:文字識別、公眾人物識別、識別各類物品
OpenCV圖像模式
位圖模式
????????位圖模式就是1位二進制深度的圖像模式,只有黑白兩種顏色。它可以由掃描或置入黑色的矢量線條圖像生成,也只能由灰度模式轉換而來。
灰度模式
????????灰度模式是8位二進制深度的圖像模式,在全黑和全白間插有254個灰度等級的顏色來描繪灰度模式的圖像,所有模式的圖像都能轉換成灰度模式。
RGB模式
? ? ? ? 簡而言之就是彩色。
新建項目
進入Qt新建一個項目,打開.pro文件,添加以下代碼
INCLUDEPATH +=/usr/local/include/
LIBS+=/usr/local/lib/libopencv_world.so
引入頭文件和域
#include <opencv2/opencv.hpp>
using namespace cv;
加載圖像
示例
我們來使用OpenCV來實現加載一張圖片
Mat img=imread("image/dog.jpg");imshow("img",img); // 顯示圖片waitKey(0); // 等待用戶操作
?Mat類似于一個圖片信息的類。
imread("path")讀取圖片信息,path為路徑。
imshow()顯示圖片。
waitKey(0)類似于一個死循環等待用戶操作,如果我們寫waitKey(1000)就等待1s就消失,當然waitKey的話只要接收到鍵盤輸入值就消失。
結果
?
處理圖像像素點
示例
#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;Mat image_process(Mat &img){int row=img.rows; // 獲取行int col=img.cols * img.channels(); // 獲取列// 改變圖片像素點for(int i=0;i<row;i++){// 獲取第i行地址uchar* data=img.ptr<uchar>(i);for(int j=0;j<col;j++){/*int q=rand()%col;data[q]=155;*/data[j]-=70;}}return img;
}int main()
{// 讀取圖片信息// Mat:圖片信息的類Mat img=imread("image/dog.jpg",IMREAD_GRAYSCALE);image_process(img);imshow("img",img);while(1){int key=waitKey(0); // 等待用戶操作if(key==10)break;}return 0;
}
結果
簡易毛玻璃特效?
示例
#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;// 毛玻璃特效
Mat img_glass(Mat &img)
{RNG rng;int random=0;for(int i=0;i<img.rows;i++){for(int j=0;j<img.cols-5;j++){random=rng.uniform(0,5);// at<>訪問Mat數據域(BGR)img.at<Vec3b>(i,j)[0]=img.at<Vec3b>(i+random,j+random)[0]; // Bimg.at<Vec3b>(i,j)[1]=img.at<Vec3b>(i+random,j+random)[1]; // Gimg.at<Vec3b>(i,j)[2]=img.at<Vec3b>(i+random,j+random)[2]; // R}}return img;
}int main()
{// 讀取圖片信息// Mat:圖片信息的類Mat img=imread("image/dog.jpg");img_glass(img);imshow("img",img);while(1){int key=waitKey(0); // 等待用戶操作if(key==10)break;}return 0;
}
結果
讀取視頻
示例
#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{Mat frame;VideoCapture cap("video/carMove.mp4");while(cap.read(frame)){imshow("video",frame);waitKey(40);}return 0;
}