11 繪制直線的line函數 DrawLine(Mat img, Pont start, Point end);
繪制橢圓的ellipse函數 DrawEllipse(Mat img, double angle) 其中angle為橢圓旋轉角度
繪制矩形的rectangle函數 DrawRectangle
繪制原的circle函數 DrawFilledCircle(Mat img, Point center)
繪制填充的多邊形的fillpoly函數 DrawPolygon(Mat img)
12 計時函數 getTickCount和getTickFrequency
getTickCount表示CPU自某個事件以來走過的時鍾周期數
getTickFrequency表示一秒鍾所走的時鍾周期數
double time0 = static_cast<double>(getTickCount());記錄起始時間
time0 = ((double)getTickCount()-time0)/getTickFrequency(); 得出運行時間
13 感興趣區域:RIO
也就是從圖像中選擇的一個圖像區域,這個區域是圖像分析所關注的重點,有兩個方法:
- 使用矩形區域Rect,指定矩形的左上角坐標和矩形的長度和寬度:
Mat imageRIO = image(Rect(100,200,logo.cols,logo.rows));
- 指定感興趣行或列的范圍(Range),Range是指從起始索引到終止索引的一連段連續序列:
imageRIO = image(Range(100,100+logo.rows),Range(200,200+logo.cols));
例子:(其中logoImage.copyTo是將mask內容復制到imageRIO1中,相似函數addWeight());
#include "stdafx.h"
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage = imread("C:/Users/Administrator/Pictures/timg.jpg");
Mat dstImage;
int rowNumber = srcImage.rows;
int colNumber = srcImage.cols;
Mat imageRIO = srcImage(Rect(100,200,150,350));
imshow("3",imageRIO);
imwrite("圖3.jpg",imageRIO);
//waitKey(100);
cvtColor(srcImage,dstImage,CV_BGR2GRAY);
imwrite("圖1.jpg",srcImage);
Mat logoImage = imread("圖3.jpg");
if (!logoImage.data)
{
printf("讀取圖片失敗\n");
return false;
}
Mat imageRIO1 = srcImage(Rect(100,200,imageRIO.rows,imageRIO.cols));
Mat mask = imread("圖1.jpg");
logoImage.copyTo(imageRIO1,mask);
imshow("1",srcImage);
imshow("2",dstImage);
waitKey(0);
return 0;
}
14 分離顏色通道 split 多通道混合 merge
split(srcImage,channels);// 通道分離
imageBlueChannel = channels.at(0);
imageGreenChannel= channels.at(1);
imageGreChannel = channels.at(2);
merge(channels,mergeImage);//混合圖像