opencv复杂一点的变换
今天的學習中用到了cvPyrDown函數,cvPyrUp函數,canny函數的用法。在此進行記錄,以便以后參考。
使用cvPyrDown()創建一幅寬度和高度均為輸入圖像一半尺寸的圖像
功能: 函數cvPyrDown使用Gaussian金字塔分解對輸入圖像向下采樣。 格式: void cvPyrDown( const CvArr*src, CvArr*dst, int filter=CV_GAUSSIAN_5x5); 參數: src輸入圖像,dst 輸出圖像,CV_GAUSSIAN_5x5是默認的模版 例子: void doPyrDown(void) { IplImage *in=cvLoadImage("lena.jpg"); int filter = IPL_GAUSSIAN_5x5; assert(in->width%2 == 0 && in->height%2 == 0);//確認長寬像素是偶數(否則無法縮放一半) IplImage *out=cvCreateImage(cvSize(in->width/2, in->height/2), in->depth, in->nChannels);//創建新圖像,長寬各一半,同深度,同通道數 cvPyrDown(in, out); cvNamedWindow("in"); cvNamedWindow("out"); cvShowImage("in", in); cvShowImage("out", out); cvWaitKey(0); cvReleaseImage(&in); cvReleaseImage(&out); cvDestroyAllWindows(); }cvPyrUP將現有的圖像在每個維度上放大兩倍
cvPyrUP(
IplImage *src,
IplImage *dst,
IplFilter filter=CV_GAUSSIAN_5x5
);
Canny邊緣檢測void Canny(InputArray src,OutputArray dst,double threshold1, double threshold2, int apertureSize=3,bool L2gradient=false )
參數詳解:
src:源圖像?
dst:目標圖像。?
threshold1:第一個滯后性閾值。?
threshold2:第二個滯后性閾值。?
apertureSize:表示應用Sobel算子的孔徑大小,其有默認值3。?
L2gradient:一個計算圖像梯度幅值的標識,有默認值false。
需要注意的是,這個函數threshold1和threshold2兩者的小者用于邊緣連接,而大者用來控制強邊緣的初始段, 推薦的高低閾值比在2:1到3:1之間。
下面是將一幅圖調用兩次doPyrdown,再用canny處理的例子。
#include "highgui.h"
#include "cv.h"
IplImage* out;
IplImage* doPyrdown(IplImage* in)
{
assert(in->width % 2 == 0 && in->height % 2 == 0);
out = cvCreateImage(
cvSize(in->width / 2, in->height / 2),
in->depth,
in->nChannels
);
cvPyrDown(in, out, CV_GAUSSIAN_5x5);
return (out);
};
IplImage* doCanny(IplImage *in,
double lowThresh,
double highTresh,
int aperture
) {
if (in->nChannels != 1) return (0);
IplImage *out = cvCreateImage(
cvSize(in->width, in->height),
IPL_DEPTH_8U,
1
);
cvCanny(in, out, lowThresh, highTresh, aperture);
return(out);
};
int main(int argc, char** argv)
{
IplImage* img = cvLoadImage("1.jpg", 0);
cvNamedWindow("原圖", CV_WINDOW_AUTOSIZE);
cvShowImage("原圖", img);
? out = doPyrdown(img);
? out = doPyrdown(out);
out = doCanny(img, 2, 3, 3);
cvNamedWindow("兩次縮放和邊緣檢測", CV_WINDOW_AUTOSIZE);
cvShowImage("兩次縮放和邊緣檢測", out);
cvWaitKey(0);
cvReleaseImage(&out);
cvDestroyWindow("兩次縮放和邊緣檢測");
cvReleaseImage(&img);
cvDestroyWindow("原圖");
return 0;
}
?
??
轉載于:https://www.cnblogs.com/alpqmz/p/7478259.html
總結
以上是生活随笔為你收集整理的opencv复杂一点的变换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio 2017 社
- 下一篇: 笔记:C++重载++前后区分