前言:
【#include <opencv2/opencv.hpp>】中“opencv2”中的”2”并不表示OpenCV的版本號碉碉。
我們知道条摸,OpenCV是基于C/C++的卢鹦,”cv”和”cv2”表示的是底層C API和C++API的區(qū)別,”cv2”表示使用的是C++API岳瞭。
1碴里、像素范圍處理函數(shù)saturate_cast<uchar>
saturate_cast<uchar>(-100)肚豺,返回0劫恒;
saturate_cast<uchar>(288)哨坪,返回255庸疾;
saturate_cast<uchar>(100),返回100当编;
這個函數(shù)的功能是確保RGB值的范圍在0~255之間届慈。
2、Filter2D函數(shù)
(通過圖像的掩膜操作實現(xiàn)圖像的對比度增強:根據(jù)掩膜重新計算圖片中每個像素的像素值)
函數(shù)調(diào)用filter2D功能:
(1)定義掩膜:Mat kernel = {Mat_<char>(3,3)<<0忿偷,-1金顿,0,-1鲤桥,5揍拆,-1,0茶凳,-1嫂拴,0}播揪;
(2)filter2D(src,dst筒狠,ddepth猪狈,kernel):
其中src與dst是Mat類型變量,src: 輸入圖像? ?dst: 輸出圖像辩恼;
目標(biāo)圖像深度ddepth:和輸入圖像具有相同的尺寸和通道數(shù)量?src.depth()雇庙,如果沒寫將生成與原圖像深度相同的圖像,當(dāng)ddepth輸入值為-1時运挫,目標(biāo)圖像和原圖像深度保持一致状共;
kernel是定義的掩膜套耕。
3谁帕、getTickCount函數(shù)、getTickFrequency()函數(shù)
OpenCV中經(jīng)常會使用getTickCount()和getTickFrequency()來計算程序執(zhí)行時間:
double t = getTickCount();
程序代碼xxxxxx
double timeconsume = (getTickCount() - t) / getTickFrequency(); //計算時間消耗長短函數(shù)
getTickCount():用于返回從操作系統(tǒng)啟動到當(dāng)前所經(jīng)的計時周期數(shù)冯袍;?
getTcikFrequency():用于返回CPU的頻率匈挖。(C++中單位為秒,也就是每秒重復(fù)的次數(shù))康愤;
所以 (getTickCount() - t) / getTcikFrequency():(當(dāng)前次數(shù)-開始計時次數(shù))/每秒重復(fù)次數(shù)=從開始到當(dāng)前所用時間(s)儡循。
4、opencv中CV_8UC3含義
預(yù)定義類型的結(jié)構(gòu):? CV_<bit_depth>(S|U|F)C<number_of_channels>??
(1) bit_depth:比特數(shù)征冷,代表8bite\16bite\32bite\64bite??
eg:8表示你所創(chuàng)建的儲存圖片的Mat對象中择膝,每個像素點在內(nèi)存空間所占的空間大小8bite。
? (2) S|U|F??
S: signed int检激,即有符號整型肴捉;? U: unsigned int,即無符號整型叔收;? F: float齿穗,單精度浮點型。??
(3) C<number_of_channels>:所存儲的圖片的通道數(shù)饺律。?
channels = 1:灰度圖片--grayImg---是--單通道圖像??
channels = 3:RGB彩色圖像---------是--3通道圖像??
channels = 4:帶Alph通道的RGB圖像--是--4通道圖像
5窃页、Scalar函數(shù)
scalar:將圖像設(shè)置成單一灰度和顏色,后面向量的位數(shù)是和圖像通道數(shù)一致复濒。
Scalar(0, 0, 255)代表將三通道圖像設(shè)置為全紅色脖卖。cvScala的儲存順序是B-G-R,而CV_RGB的儲存順序是R-G-B巧颈,兩者正好相反畦木,所以cvScalar(0, 0, 255)實際意思是R=255,即為紅色的洛二。
下面給出示例代碼:【定義一個矩陣并對其附上顏色:Scalar函數(shù)的使用】
#include<opencv2/opencv.hpp>?
#include<iostream>??
using namespace std;?
using namespace cv;??
int main(int argc,char** argv)?
{??
Mat src;??
src = imread("F:/20.jpg");?
if (src.empty())? {? ?
cout << "讀取圖片有誤" << endl;? ?
waitKey(0);? ?
return -1;? }??
namedWindow("loadimage", WINDOW_AUTOSIZE);?
?imshow("loadimage", src);??
Mat dst;??
dst=Mat(src.size(),src.type());? ? //創(chuàng)建一個矩陣根據(jù)src的大小和類型馋劈,賦予了矩陣的大小和矩陣元素的種類??
dst = Scalar(255,0,0);? ?//給創(chuàng)建的矩陣上的每個點付給幅值攻锰,給予顏色?
?//dst(a,b妓雾,c)函數(shù)的三個參數(shù)a:藍色娶吞,b:綠色,c:紅色械姻;幅度是0-255設(shè)置坐標(biāo)點的參數(shù)妒蛇。?
//opencv是bgr圖像??
namedWindow("outputpic",CV_WINDOW_AUTOSIZE);?
imshow("outputpic",dst);??
waitKey(0);??
return 0;?
}