1. 程式人生 > >對於毛星雲opencv教程中的方法匯總

對於毛星雲opencv教程中的方法匯總

range 所有 gmat 分水嶺 str ntc 指針 針對 air

此隨筆只為記錄,以備後續的回顧

一、圖像的載入與顯示
C++: Mat imread(const string& filename, intflags=1 );
flags >0返回一個3通道的彩色圖像
flags =0返回灰度圖像。
flags <0返回包含Alpha通道的加載的圖像。
C++: void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE );
WINDOW_NORMAL設置了這個值,用戶便可以改變窗口的大小(沒有限制)
WINDOW_AUTOSIZE如果設置了這個值,窗口大小會自動調整以適應所顯示的圖像,並且不能手動改變窗口大小。
WINDOW_OPENGL 如果設置了這個值的話,窗口創建的時候便會支持OpenGL
C++: void imshow(const string& winname, InputArray mat);
C++: bool imwrite(const string& filename,InputArray img, const vector<int>& params=vector<int>() );

二、設定感興趣區域--ROI
Mat imageROI=image(Rect(500,250,logo.cols,logo.rows));
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);

三、顏色通道分離和混合
C++: void split(InputArray m,OutputArrayOfArrays mv);
C++: void merge(InputArrayOfArrays mv,OutputArray dst)

四、創建Trackbar & 圖像對比度、亮度值調整
C++: int createTrackbar(conststring& trackbarname, conststring& winname,
int* value, int count, TrackbarCallback onChange=0,void* userdata=0);

五、線性鄰域濾波專場:方框濾波、均值濾波與高斯濾波
C++: void boxFilter(InputArray src,OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), boolnormalize=true, int borderType=BORDER_DEFAULT )
C++: void blur(InputArray src, OutputArraydst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT )
C++: void GaussianBlur(InputArray src,OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, intborderType=BORDER_DEFAULT )

六、 非線性濾波專場:中值濾波、雙邊濾波
C++: void medianBlur(InputArray src,OutputArray dst, int ksize)
C++: void bilateralFilter(InputArray src, OutputArraydst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT)

七、形態學圖像處理(一):膨脹與腐蝕
C++: void dilate( InputArray src,OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1,
int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() );
C++: void erode( InputArray src,OutputArray dst,InputArray kernel,Point anchor=Point(-1,-1), int iterations=1,
int borderType=BORDER_CONSTANT,const Scalar& borderValue=morphologyDefaultBorderValue() );

八、形態學圖像處理(二):開運算、閉運算、形態學梯度、頂帽、黑帽合輯
switch( op )
{
case MORPH_ERODE:
erode( src, dst, kernel, anchor, iterations, borderType, borderValue );
break;
case MORPH_DILATE:
dilate( src, dst, kernel, anchor, iterations, borderType, borderValue );
break;
case MORPH_OPEN:
erode( src, dst, kernel, anchor, iterations, borderType, borderValue );
dilate( dst, dst, kernel, anchor, iterations, borderType, borderValue );
break;
case CV_MOP_CLOSE:
dilate( src, dst, kernel, anchor, iterations, borderType, borderValue );
erode( dst, dst, kernel, anchor, iterations, borderType, borderValue );
break;
case CV_MOP_GRADIENT:
erode( src, temp, kernel, anchor, iterations, borderType, borderValue );
dilate( src, dst, kernel, anchor, iterations, borderType, borderValue );
dst -= temp;
break;
case CV_MOP_TOPHAT:
if( src.data != dst.data )
temp = dst;
erode( src, temp, kernel, anchor, iterations, borderType, borderValue );
dilate( temp, temp, kernel, anchor,iterations, borderType, borderValue );
dst = src - temp;
break;
case CV_MOP_BLACKHAT:
if( src.data != dst.data )
temp = dst;
dilate( src, temp, kernel, anchor, iterations, borderType, borderValue);
erode( temp, temp, kernel, anchor, iterations, borderType, borderValue);
dst = temp - src;
break;
default:
CV_Error( CV_StsBadArg, "unknown morphological operation" );
}

九、OpenCV邊緣檢測:Canny算子,Sobel算子,Laplace算子,Scharr濾波器合
C++: void Canny(InputArray image,OutputArray edges, double threshold1, double threshold2, int apertureSize=3,bool L2gradient=false )
C++: void Sobel (InputArray src,OutputArray dst,int ddepth,int dx,int dy,int ksize=3,double scale=1,double delta=0,int borderType=BORDER_DEFAULT );
C++: void Laplacian(InputArray src,OutputArray dst, int ddepth, int ksize=1, double scale=1, double delta=0, intborderType=BORDER_DEFAULT );
C++: void Scharr(InputArray src,OutputArray dst,int ddepth,int dx,int dy,double scale=1,double delta=0,intborderType=BORDER_DEFAULT )

十、OpenCV圖像金字塔:高斯金字塔、拉普拉斯金字塔與圖片尺寸縮放
C++: void resize(InputArray src,OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
C++: void pyrUp(InputArray src, OutputArraydst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT )
C++: void pyrDown(InputArray src,OutputArray dst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT)

十一、OpenCV霍夫變換:霍夫線變換,霍夫圓變換合輯
C++: void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0 )
C++: void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta, int threshold, double minLineLength=0, double maxLineGap=0 )
C++: void HoughCircles(InputArray image,OutputArray circles, int method, double dp, double minDist, double param1=100,double param2=100, int minRadius=0, int maxRadius=0 )

十二、水漫金山:OpenCV漫水填充算法(Floodfill)
C++: void setMouseCallback(conststring& winname, MouseCallback onMouse, void* userdata=0 )
C++: int floodFill(InputOutputArray image, Point seedPoint, Scalar newVal,Rect* rect=0,Scalar loDiff=Scalar(),Scalar upDiff=Scalar(),int flags=4 )
C++: int floodFill(InputOutputArray image, InputOutputArray mask, Point seedPoint,Scalar newVal, Rect* rect=0, Scalar loDiff=Scalar(),
Scalar upDiff=Scalar(), int flags=4 )

十三、OpenCV角點檢測之Harris角點檢測
C++: void cornerHarris(InputArray src,OutputArray dst, int blockSize, int ksize, double k, intborderType=BORDER_DEFAULT )
C++: double threshold(InputArray src,OutputArray dst, double thresh, double maxval, int type)

十四、OpenCV重映射 & SURF特征點檢測合輯
C++: void remap(InputArray src,OutputArraydst,InputArray map1,InputArray map2,int interpolation,int borderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar())
C++: void drawKeypoints(const Mat&image, const vector<KeyPoint>& keypoints, Mat& outImage, constScalar& color=Scalar::all(-1),
int flags=DrawMatchesFlags::DEFAULT )
使用 FeatureDetector 接口來發現感興趣點。
使用 SurfFeatureDetector 以及其函數 detect 來實現檢測過程
使用函數 drawKeypoints 繪制檢測到的關鍵點。
使用 SurfFeatureDetector發現感興趣點
int minHessian = 400;//定義SURF中的hessian閾值特征點檢測算子
SurfFeatureDetector detector( minHessian );
std::vector<KeyPoint> keypoints
detector.detect( srcImage1, keypoints );
使用drawKeypoints畫出
Mat img_keypoints;
drawKeypoints( srcImage1, keypoints, img_keypoints, Scalar::all(-1), DrawMatchesFlags::DEFAULT );

十五、OpenCV仿射變換 & SURF特征點描述合輯
C++: void warpAffine(InputArray src,OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, intborderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar())
C++: void drawMatches(const Mat& img1,constvector<KeyPoint>& keypoints1,const Mat& img2,constvector<KeyPoint>& keypoints2,
constvector<DMatch>& matches1to2,Mat& outImg,const Scalar&matchColor=Scalar::all(-1),const Scalar&singlePointColor=Scalar::all(-1),
const vector<char>&matchesMask=vector<char>(),intflags=DrawMatchesFlags::DEFAULT )
C++: void drawMatches(const Mat& img1,constvector<KeyPoint>& keypoints1,const Mat& img2,constvector<KeyPoint>& keypoints2,
const vector<vector<DMatch>>&matches1to2,Mat& outImg,const Scalar&matchColor=Scalar::all(-1),
const Scalar&singlePointColor=Scalar::all(-1),constvector<vector<char>>& matchesMask=vector<vector<char>>(),intflags=DrawMatchesFlags::DEFAULT )
使用 DescriptorExtractor 接口來尋找關鍵點對應的特征向量。
使用 SurfDescriptorExtractor 以及它的函數 compute 來完成特定的計算。
使用 BruteForceMatcher 來匹配特征向量。
使用函數 drawMatches 來繪制檢測到的匹配點。
計算描述子(特征向量)
SurfDescriptorExtractorextractor;
Matdescriptors1, descriptors2;
extractor.compute(srcImage1, keyPoint1, descriptors1 );
extractor.compute(srcImage2, keyPoints2, descriptors2 );
使用BruteForce進行匹配
//實例化一個匹配器
BruteForceMatcher<L2<float> > matcher;
std::vector<DMatch > matches;
//匹配兩幅圖中的描述子(descriptors)
matcher.match(descriptors1, descriptors2, matches );

繪制從兩個圖像中匹配出的關鍵點
MatimgMatches;
drawMatches(srcImage1, keyPoint1, srcImage2, keyPoints2, matches, imgMatches );//進行繪制
imshow("匹配圖", imgMatches );

十六、反響投影&尋找凸包&針對整體的輪廓對象操作&計算直方圖&分水嶺算法
C++: void calcBackProject(const Mat* image,int nimage,const int* channels,InputArray hist,OutputArray backProject,const float** ranges,double scale=1,
bool uniform=true )
通道復制函數
C++: void mixChannels(const Mat* src,size_t nsrcs,Mat* dst,size_t ndsts,const int* formTo,size_t npairs)
C++: void convexHull(InputArray points, int hull, bool clockwise = ture, bool return, points)
C++: void findContours(InputArray src,OutputArrayOfArrays contours,OutputArray hierarchy(如指針的頭),int mode(檢索模式),int method(近似方法),
Point offset=Point()(偏移量))
C++: void drawContours(IntputArray src,InputArrayOfArrays contours,int contourIdx(若為0,則繪制所有輪廓),const Scalar& color,int thickness(輪廓粗細),
int lineType,InputArray hisrarchy=noArray,int maxLevel,Point offset=Point() )
C++: void calcHist(const Mat* images,int nimages,const int* cannels,InputArray mask,OutputArray hist,int dims,const int* histSize,const float** ranges,
bool uniform,bool accumulate=false)
C++: void minMaxLoc(InputArray src,double* minVal,double* maxVAL=0,Point* minLoc=0,Point* maxLoc=0,InputArray mask=noArray() )
C++: watershed(srcImage, maskImage);具體看博客

十七、模板匹配
C++: void macthTemplate(InputArray src,InputArray temp1,OutputArray result,int method)

十八、尋找透視變化 & FLANN & SIFT
C++: void findHomography(InputArray srcPoints,InputArray dstPoints,int method=0,double ransacReprojThreshold=3,OutputArray mask=noArray() )

對於毛星雲opencv教程中的方法匯總