imgproc 模块 图像处理Word下载.docx

上传人:b****6 文档编号:8348891 上传时间:2023-05-11 格式:DOCX 页数:18 大小:1.97MB
下载 相关 举报
imgproc 模块 图像处理Word下载.docx_第1页
第1页 / 共18页
imgproc 模块 图像处理Word下载.docx_第2页
第2页 / 共18页
imgproc 模块 图像处理Word下载.docx_第3页
第3页 / 共18页
imgproc 模块 图像处理Word下载.docx_第4页
第4页 / 共18页
imgproc 模块 图像处理Word下载.docx_第5页
第5页 / 共18页
imgproc 模块 图像处理Word下载.docx_第6页
第6页 / 共18页
imgproc 模块 图像处理Word下载.docx_第7页
第7页 / 共18页
imgproc 模块 图像处理Word下载.docx_第8页
第8页 / 共18页
imgproc 模块 图像处理Word下载.docx_第9页
第9页 / 共18页
imgproc 模块 图像处理Word下载.docx_第10页
第10页 / 共18页
imgproc 模块 图像处理Word下载.docx_第11页
第11页 / 共18页
imgproc 模块 图像处理Word下载.docx_第12页
第12页 / 共18页
imgproc 模块 图像处理Word下载.docx_第13页
第13页 / 共18页
imgproc 模块 图像处理Word下载.docx_第14页
第14页 / 共18页
imgproc 模块 图像处理Word下载.docx_第15页
第15页 / 共18页
imgproc 模块 图像处理Word下载.docx_第16页
第16页 / 共18页
imgproc 模块 图像处理Word下载.docx_第17页
第17页 / 共18页
imgproc 模块 图像处理Word下载.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

imgproc 模块 图像处理Word下载.docx

《imgproc 模块 图像处理Word下载.docx》由会员分享,可在线阅读,更多相关《imgproc 模块 图像处理Word下载.docx(18页珍藏版)》请在冰点文库上搜索。

imgproc 模块 图像处理Word下载.docx

if(display_dst(DELAY_CAPTION)!

///使用均值平滑

HomogeneousBlur"

for(inti=1;

i<

MAX_KERNEL_LENGTH;

i=i+2)

{blur(src,dst,Size(i,i),Point(-1,-1));

if(display_dst(DELAY_BLUR)!

}}

///使用高斯平滑

GaussianBlur"

{GaussianBlur(src,dst,Size(i,i),0,0);

///使用中值平滑

MedianBlur"

{medianBlur(src,dst,i);

///使用双边平滑

BilateralBlur"

{bilateralFilter(src,dst,i,i*2,i/2);

///等待用户输入

display_caption("

End:

Pressakey!

"

);

waitKey(0);

return0;

intdisplay_caption(char*caption)

dst=Mat:

:

zeros(src.size(),src.type());

putText(dst,caption,

Point(src.cols/4,src.rows/2),

FONT_HERSHEY_COMPLEX,1,Scalar(255,255,255));

imshow(window_name,dst);

intc=waitKey(DELAY_CAPTION);

if(c>

=0){return-1;

intdisplay_dst(intdelay)

intc=waitKey(delay);

结果

腐蚀与膨胀

 

Matsrc,erosion_dst,dilation_dst;

interosion_elem=0;

interosion_size=0;

intdilation_elem=0;

intdilation_size=0;

intconstmax_elem=2;

intconstmax_kernel_size=21;

/**FunctionHeaders*/

voidErosion(int,void*);

voidDilation(int,void*);

/**@functionmain*/

intmain(intargc,char**argv)

{

///Load图像

src=imread("

if(!

src.data)

{return-1;

///创建显示窗口

namedWindow("

ErosionDemo"

DilationDemo"

moveWindow("

src.cols,0);

///创建腐蚀Trackbar

createTrackbar("

Element:

\n0:

Rect\n1:

Cross\n2:

Ellipse"

"

&

erosion_elem,max_elem,

Erosion);

Kernelsize:

\n2n+1"

erosion_size,max_kernel_size,

///创建膨胀Trackbar

dilation_elem,max_elem,

Dilation);

dilation_size,max_kernel_size,

///Defaultstart

Erosion(0,0);

Dilation(0,0);

}

/**@functionErosion*/

voidErosion(int,void*)

interosion_type;

if(erosion_elem==0){erosion_type=MORPH_RECT;

elseif(erosion_elem==1){erosion_type=MORPH_CROSS;

elseif(erosion_elem==2){erosion_type=MORPH_ELLIPSE;

Matelement=getStructuringElement(erosion_type,

Size(2*erosion_size+1,2*erosion_size+1),

Point(erosion_size,erosion_size));

///腐蚀操作

erode(src,erosion_dst,element);

imshow("

erosion_dst);

/**@functionDilation*/

voidDilation(int,void*)

intdilation_type;

if(dilation_elem==0){dilation_type=MORPH_RECT;

elseif(dilation_elem==1){dilation_type=MORPH_CROSS;

elseif(dilation_elem==2){dilation_type=MORPH_ELLIPSE;

Matelement=getStructuringElement(dilation_type,

Size(2*dilation_size+1,2*dilation_size+1),

Point(dilation_size,dilation_size));

///膨胀操作

dilate(src,dilation_dst,element);

dilation_dst);

更多形态学变换

源码

Matsrc,dst;

intmorph_elem=0;

intmorph_size=0;

intmorph_operator=0;

intconstmax_operator=4;

char*window_name="

MorphologyTransformationsDemo"

/**回调函数申明*/

voidMorphology_Operations(int,void*);

/**@函数main*/

intmain()

///装载图像

namedWindow(window_name,1);

///创建选择具体操作的trackbar

createTrackbar("

Operator:

Opening-1:

Closing\n2:

Gradient-3:

TopHat\n4:

BlackHat"

window_name,&

morph_operator,max_operator,Morphology_Operations);

///创建选择内核形状的trackbar

Rect-1:

Cross-2:

window_name,

morph_elem,max_elem,

Morphology_Operations);

///创建选择内核大小的trackbar

morph_size,max_kernel_size,

///启动使用默认值

Morphology_Operations(0,0);

/**

*@函数Morphology_Operations

*/

voidMorphology_Operations(int,void*)

//由于MORPH_X的取值范围是:

2,3,4,5和6

intoperation=morph_operator+2;

Matelement=getStructuringElement(morph_elem,Size(2*morph_size+1,2*morph_size+1),Point(morph_size,morph_size));

///运行指定形态学操作

morphologyEx(src,dst,operation,element);

∙在编译上面的代码之后,我们可以运行结果,将图片路径输入。

这里使用图像:

∙这里是显示窗口的两个截图。

第一幅图显示了使用交错内核和 

开运算 

之后的结果,第二幅图显示了使用椭圆内核和 

黑帽 

之后的结果。

图像金字塔

Matsrc,dst,tmp;

PyramidsDemo"

///指示说明

printf("

\nZoomIn-Outdemo\n"

------------------\n"

*[u]->

Zoomin\n"

*[d]->

Zoomout\n"

*[ESC]->

Closeprogram\n\n"

///测试图像-尺寸必须能被2^{n}整除

../lesson1/chicky_512.png"

{printf("

Nodata!

--Exitingtheprogram\n"

);

return-1;

tmp=src;

dst=tmp;

///循环

while(true)

intc;

c=waitKey(10);

if((char)c==27)

{break;

if((char)c=='

u'

{pyrUp(tmp,dst,Size(tmp.cols*2,tmp.rows*2));

**ZoomIn:

Imagex2\n"

elseif((char)c=='

d'

{pyrDown(tmp,dst,Size(tmp.cols/2,tmp.rows/2));

**ZoomOut:

Image/2\n"

tmp=dst;

∙在编译上面的代码之后,我们可以运行结果。

程序调用了图像 

chicky_512.jpg 

,你可以在 

tutorial_code/image 

文件夹找到它。

注意图像大小是 

因此向下采样不会产生错误(

)。

原图像如下所示:

∙首先按两次‘d’连续两次向下采样 

pyrDown 

,结果如图:

∙由于我们缩小了图像,我们也因此丢失了一些信息。

通过连续按两次‘u’向上采样两次 

pyrUp 

,很明显图像有些失真:

基本的阈值操作

///全局变量定义及赋值

intthreshold_value=0;

intthreshold_type=3;

intconstmax_value=255;

intconstmax_type=4;

intconstmax_BINARY_value=255;

Matsrc,src_gray,dst;

ThresholdDemo"

char*trackbar_type="

Type:

\n0:

Binary\n1:

BinaryInverted\n2:

Truncate\n3:

ToZero\n4:

ToZeroInverted"

char*trackbar_value="

Value"

///自定义函数声明

voidThreshold_Demo(int,void*);

/**

*@主函数

///读取一副图片,不改变图片本身的颜色类型(该读取方式为DOS运行模式)

///将图片转换成灰度图片

cvtColor(src,src_gray,1);

///创建一个窗口显示图片

namedWindow(window_name,1);

///创建滑动条来控制阈值

createTrackbar(trackbar_type,

window_name,&

threshold_type,

max_type,Threshold_Demo);

createTrackbar(trackbar_value,

threshold_value,

max_value,Threshold_Demo);

///初始化自定义的阈值函数

Threshold_Demo(0,0);

///等待用户按键。

如果是ESC健则退出等待过程。

while(true)

c=waitKey(20);

*@自定义的阈值函数

voidThreshold_Demo(int,void*)

/*0:

二进制阈值

1:

反二进制阈值

2:

截断阈值

3:

0阈值

4:

反0阈值

threshold(src_gray,dst,threshold_value,max_BINARY_value,threshold_type);

1.程序编译过后,从正确的路径中读取一张图片。

例如,该输入图片如下所示:

2.首先,阈值类型选择为反二进制阈值类型。

我们希望灰度值大于阈值的变暗,即这一部分像素的灰度值设定为0。

从下图中可以很清楚的看到这样的变化。

(在原图中,狗的嘴和眼睛部分比图像中的其他部分要亮,在结果图中可以看到由于反二进制阈值分割,这两部分变的比其他图像的都要暗。

原理具体参见本节中反二进制阈值部分解释)

3.现在,阈值的类型选择为0阈值。

在这种情况下,我们希望那些在图像中最黑的像素点彻底的变成黑色,而其他大于阈值的像素保持原来的面貌。

其结果如下图所示:

实现自己的线性滤波器

下面这段程序做了些什么?

o载入一幅图像

o对图像执行 

归一化块滤波器 

举例来说,如果该滤波器核的大小为 

,则它会像下面这样:

程序将执行核的大小分别为3、5、7、9、11的滤波器运算。

o该滤波器每一种核的输出将在屏幕上显示500毫秒

/**@函数main*/

intmain()

///声明变量

Matsrc,dst;

Matkernel;

Pointanchor;

doubledelta;

intddepth;

intkernel_size;

char*window_name="

filter2DDemo"

///载入图像

///创建窗口

///初始化滤波器参数

anchor=Point(-1,-1);

delta=0;

ddepth=-1;

///循环-每隔0.5秒,用一个不同的核来对图像进行滤波

intind=0;

c=waitKey(500);

///按'

ESC'

可退出程序

///更新归一化块滤波器的核大小

kernel_size=3+2*(ind%5);

kernel=Mat:

ones(kernel_size,kernel_size,CV_32F)/(float)(kernel_size*kernel_size);

///使用滤波器

filter2D(src,dst,ddepth,kernel,anchor,delta,BORDER_DEFAULT);

ind++;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2