opencv圖像處理常用小程序

1、轉換爲灰度圖
cvtColor(src, dst, CV_RGB2GRAY);
2、膨脹,腐蝕
Mat dilateElement = getStructuringElement(MORPH_RECT, Size(10, 10)); // 獲得內核 dilate(img, img, dilateElement); // 膨脹函數
Mat erodeElement = getStructuringElement(MORPH_RECT, Size(10, 10)); // 獲得內核 erode(img, img, erodeElement); // 腐蝕函數
3、Mat初始化
Mat M(2, 2, CV_8UC3, cv::Scalar::all(1)); //前兩個參數時指矩陣的行數和列數, //第3個參數:數據類型 //第4個是對每個像素值賦初值,這個代碼就是把每個通道的像素值都 //都賦值1.,如果是Scalsr(255,0,0),就是將255,0,0分別賦予每個像素點的3個通道。
4、圖像二值化
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)
第三個參數,double類型的thresh,閾值的具體值。
第四個參數,double類型的maxval,當第五個參數閾值類型type取 THRESH_BINARY 或THRESH_BINARY_INV閾值類型時的最大值.
第五個參數,int類型的type,閾值類型:
0: THRESH_BINARY  當前點值大於閾值時,取Maxval,也就是第四個參數,下面再不說明,否則設置爲0
1: THRESH_BINARY_INV 當前點值大於閾值時,設置爲0,否則設置爲Maxval
2: THRESH_TRUNC 當前點值大於閾值時,設置爲閾值,否則不改變
3: THRESH_TOZERO 當前點值大於閾值時,不改變,否則設置爲0
4: THRESH_TOZERO_INV  當前點值大於閾值時,設置爲0,否則不改變
5、vecto
找vector最大值和第二大值
vector<double> line_len_right;
if (line_len_right.size() != 0 )
{
//找出左邊最大
vector<double>::iterator max_element= max_element(begin(line_len_right), end(line_len_right)); 
double max_left_dis = *max_element;
//找出最大值的索引
index=distance(begin(line_len_right), max_element);
//找出最小值及其索引
auto smallest = min_element(begin(line_len_right), std::end(line_len_right)); 
small_index=distance(begin(line_len_right), smallest);
//刪除最大值,找出第二大值
vector<double>::iterator iter = find(line_len_left.begin(), line_len_left.end(), max_left_dis);
if (iter != line_len_left.end())line_len_left.erase(iter);
double sec_max_left_dis = *max_element(line_len_right.begin(), line_len_left.end());
}
二維vector 定義和賦值
 vector<vector<int>> a;  //構造一個3*2的 二維容器數組 
vector<int> a0;   a0.push_back(00); a0.push_back(01);
vector<int> a1;   a1.push_back(00); a1.push_back(01);
vector<int> a2;  a2.push_back(00); a2.push_back(01);1
a.push_back(a0);  
a.push_back(a1);  
a.push_back(a2);
6、查看程序運行時間
#include  <cv.h>    
double t = (double)cvGetTickCount();    
//。。。。。。算法或程序代碼    
t = (double)cvGetTickCount() - t;  
printf( "processing time = %gms\n", t/(cvGetTickFrequency()*1000) );//輸出時間爲ms  
printf( "processing time = %gs\n", t/(cvGetTickFrequency()*1000000) );//輸出時間爲s
7、旋轉圖片90度
Mat t, f;
transpose(Img, t);
flip(t, f, 1); //f就是旋轉以後的圖,包括長寬轉換 
8、圖片黑白像素轉換
bitwise_not(HighPassImg, heightenImg);
9、局部自適應二值化
Mat gray_Img;
cvtColor(dst, gray_Img, CV_RGB2GRAY);
int blockSize = 25;
int constValue = 10;
Mat local;
adaptiveThreshold(gray_Img, local, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, blockSize, constValue);
10、統一圖片尺寸
Mat dst; //目標圖像指針
int width = 0;
int height = 0;
if ((img.rows + 10) < img.cols)
{
width = 400; //目標圖像的寬爲固定像素
height = 300;
}
else
{
width = 300; //目標圖像的寬爲固定像素
height = 400;
}
resize(img, dst, Size(width, height));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章