日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv复杂一点的变换

發(fā)布時間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv复杂一点的变换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天的學(xué)習(xí)中用到了cvPyrDown函數(shù),cvPyrUp函數(shù),canny函數(shù)的用法。在此進(jìn)行記錄,以便以后參考。

使用cvPyrDown()創(chuàng)建一幅寬度和高度均為輸入圖像一半尺寸的圖像

功能: 函數(shù)cvPyrDown使用Gaussian金字塔分解對輸入圖像向下采樣。 格式: void cvPyrDown( const CvArr*src, CvArr*dst, int filter=CV_GAUSSIAN_5x5); 參數(shù): src輸入圖像,dst 輸出圖像,CV_GAUSSIAN_5x5是默認(rèn)的模版 例子: void doPyrDown(void) { IplImage *in=cvLoadImage("lena.jpg"); int filter = IPL_GAUSSIAN_5x5; assert(in->width%2 == 0 && in->height%2 == 0);//確認(rèn)長寬像素是偶數(shù)(否則無法縮放一半) IplImage *out=cvCreateImage(cvSize(in->width/2, in->height/2), in->depth, in->nChannels);//創(chuàng)建新圖像,長寬各一半,同深度,同通道數(shù) cvPyrDown(in, out); cvNamedWindow("in"); cvNamedWindow("out"); cvShowImage("in", in); cvShowImage("out", out); cvWaitKey(0); cvReleaseImage(&in); cvReleaseImage(&out); cvDestroyAllWindows(); }

cvPyrUP將現(xiàn)有的圖像在每個維度上放大兩倍

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 )

參數(shù)詳解:

src:源圖像?
dst:目標(biāo)圖像。?
threshold1:第一個滯后性閾值。?
threshold2:第二個滯后性閾值。?
apertureSize:表示應(yīng)用Sobel算子的孔徑大小,其有默認(rèn)值3。?
L2gradient:一個計算圖像梯度幅值的標(biāo)識,有默認(rèn)值false。

需要注意的是,這個函數(shù)threshold1和threshold2兩者的小者用于邊緣連接,而大者用來控制強(qiáng)邊緣的初始段, 推薦的高低閾值比在2:1到3:1之間。

下面是將一幅圖調(diào)用兩次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;
}

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/alpqmz/p/7478259.html

總結(jié)

以上是生活随笔為你收集整理的opencv复杂一点的变换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。