1.载入一个带有有趣纹理的图像,使用cvSmooth()函数以多种方法平滑图像,参数为smoothtype = CV_GAUSSIAN.

a.使用对称的平滑的平滑窗口,大小依次是3x3,5x5,9x9,11x11,并显示结果。

b.用5x5高斯滤净器平滑图像两次和用两次11x11平滑器平滑一次的输出结果是最接近相同吗?为什么?

#include <cv.h>
#include <highgui.h>
int main()
{
IplImage *img = cvLoadImage("3.jpg", );
cvNamedWindow("原图", );
cvShowImage("原图", img);
IplImage *three = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels);
IplImage *five = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels);
IplImage *double_five = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels);
IplImage *nine = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels);
IplImage *eleven = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels);
IplImage *double_eleven = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels); cvSmooth(img, three, CV_GAUSSIAN, , );
cvSmooth(img, five, CV_GAUSSIAN, , );
cvSmooth(img, nine, CV_GAUSSIAN, , );
cvSmooth(img, eleven, CV_GAUSSIAN, , );
cvSmooth(five, double_five, CV_GAUSSIAN, , );
cvSmooth(eleven, double_eleven, CV_GAUSSIAN, , );
cvNamedWindow("three", );
cvNamedWindow("five", );
cvNamedWindow("nine", );
cvNamedWindow("eleven", );
cvNamedWindow("double_five", );
cvNamedWindow("double_eleven", );
cvShowImage("three", three);
cvShowImage("five", five);
cvShowImage("nine", nine);
cvShowImage("eleven", eleven);
cvShowImage("double_five", double_five);
cvShowImage("double_eleven", double_eleven);
cvWaitKey();
cvReleaseImage(&img);
cvReleaseImage(&three);
cvReleaseImage(&five);
cvReleaseImage(&double_five);
cvReleaseImage(&nine);
cvReleaseImage(&eleven);
cvReleaseImage(&double_eleven);
cvDestroyAllWindows();
return ;
}

2.

#include <cv.h>
#include <highgui.h>
int main()
{
IplImage *img = cvCreateImage(cvSize(, ), IPL_DEPTH_8U, );
IplImage *five = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels);
IplImage *nine = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels);
cvZero(img);
cvNamedWindow("main1", );
cvShowImage("main1", img);
for (int i = ; i <= ; i++)
{
uchar *ptr = (uchar*)(img->imageData + i*img->widthStep);
for (int j = ; j <= ; j++)
{
ptr[j] = 0xff;
}
}
cvNamedWindow("main", );
cvShowImage("main", img); cvSmooth(img, five, CV_GAUSSIAN,,);
cvSmooth(five, five, CV_GAUSSIAN, , ); cvNamedWindow("five", );
cvShowImage("five", five); cvSmooth(five, nine, CV_GAUSSIAN, , );
cvNamedWindow("nine", );
cvShowImage("nine", nine);
cvWaitKey(); cvReleaseImage(&img);
cvReleaseImage(&five);
cvReleaseImage(&nine);
cvDestroyAllWindows();
return ;
}

4.

#include <cv.h>
#include <highgui.h>
int main()
{
IplImage *img1 = cvLoadImage("111.jpg", );
IplImage *img2 = cvLoadImage("112.jpg", );
IplImage *img3 = cvCreateImage(cvSize(img1->width, img1->height), img1->depth, img1->nChannels);
IplImage *img4 = cvCreateImage(cvSize(img1->width, img1->height), img1->depth, img1->nChannels);
IplImage *img5 = cvCreateImage(cvSize(img1->width, img1->height), img1->depth, img1->nChannels);
cvSub(img1, img2,img3,NULL);//img1 - img2
cvAbs(img3, img3); // img3 的绝对值 cvDilate(img3, img4, NULL, ); //膨胀处理
cvErode(img4, img5, NULL, ); //腐蚀操作
cvNamedWindow("111.jpg", );
cvNamedWindow("112.jpg", );
cvNamedWindow("img3", );
cvNamedWindow("img4", );
cvNamedWindow("img5", );
cvShowImage("111.jpg", img1);
cvShowImage("112.jpg", img2);
cvShowImage("img3", img3);
cvShowImage("img4", img4);
cvShowImage("img5", img5);
cvWaitKey();
cvReleaseImage(&img1);
cvReleaseImage(&img2);
cvReleaseImage(&img3);
cvReleaseImage(&img4);
cvReleaseImage(&img5);
cvDestroyAllWindows();
return ;
}

5

#include <cv.h>
#include <highgui.h>
int main()
{
IplImage *img1 = cvLoadImage("100.jpg", CV_LOAD_IMAGE_GRAYSCALE);
IplImage *img2 = cvLoadImage("101.jpg", CV_LOAD_IMAGE_GRAYSCALE);
IplImage *img3 = cvCreateImage(cvGetSize(img1), img1->depth, img1->nChannels);
IplImage *img4 = cvCreateImage(cvGetSize(img1), img1->depth, img1->nChannels);
IplImage *img5 = cvCreateImage(cvGetSize(img1), img1->depth, img1->nChannels);
cvSub(img1, img2, img3, NULL);//img1 - img2 = img3
cvAbs(img3, img3); //img3 的绝对值
cvThreshold(img3, img4, , , CV_THRESH_BINARY_INV); //对img3进行二进制阀值操作
IplConvKernel *element = cvCreateStructuringElementEx(, , , , CV_SHAPE_RECT, NULL);//自定义核
cvMorphologyEx(img4, img5, NULL, element, CV_MOP_OPEN, );//进行开运算
cvReleaseStructuringElement(&element); //释放核
cvNamedWindow("img1", );
cvNamedWindow("img2", );
cvNamedWindow("img3", );
cvNamedWindow("img4", );
cvNamedWindow("img5", );
cvShowImage("img1", img1);
cvShowImage("img2", img2);
cvShowImage("img3", img3);
cvShowImage("img4", img4);
cvShowImage("img5", img5);
cvWaitKey();
cvReleaseImage(&img1);
cvReleaseImage(&img2);
cvReleaseImage(&img3);
cvReleaseImage(&img4);
cvReleaseImage(&img5);
cvDestroyAllWindows();
return ;
}

opencv第四章的更多相关文章

  1. 《学习OpenCV》练习题第四章第八题ab

    这道题是利用OpenCV例子程序里自带的人脸检测程序,做点图像的复制操作以及alpha融合. 说明:人脸检测的程序我参照了网上现有的例子程序,没有用我用的OpenCV版本(2.4.5)的facedet ...

  2. 《学习OpenCV》练习题第四章第三题b

    #include <highgui.h> #include <cv.h> #include "opencv_libs.h" /* *<学习OpenCV ...

  3. 《学习OpenCV》练习题第四章第三题a

    #include <highgui.h> #include <cv.h> #include "opencv_libs.h" #pragma comment ...

  4. 《学习OpenCV》练习题第四章第二题

    #include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...

  5. 《学习OpenCV》练习题第四章第一题b&c

    #include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...

  6. 《学习OpenCV》练习题第四章第一题a

    #include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...

  7. 《学习OpenCV》练习题第四章第七题abc

    题外话:一直是打算把这本书的全部课后编程题写完的,中间断了几个月,一直忙于其他事.现在开始补上. 这道题我不清楚我理解的题意是不是正确的,这道题可以练习用OpenCV实现透视变换(可以用于矫正在3维环 ...

  8. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  9. 《Linux内核设计与实现》读书笔记 第四章 进程调度

    第四章进程调度 进程调度程序可看做在可运行太进程之间分配有限的处理器时间资源的内核子系统.调度程序是多任务操作系统的基础.通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发执行的 ...

随机推荐

  1. python字符串排序方法

    一般情况下,python中对一个字符串排序相当麻烦: 一.python中的字符串类型是不允许直接改变元素的.必须先把要排序的字符串放在容器里,如list. 二.python中的list容器的sort( ...

  2. pta函数作业

    7-10 设计思路:本题需要判断一个正整数数是否为素数,所谓素数,就是除一和本身外没有其他因数的数.具体判断过程如下:对于一个大于一的整数,从2开始用循环计数i去除此数,若余数不为零,则循环计数i自加 ...

  3. C#中async和await用法

    .net 4.5中新增了async和await这一对用于异步编程的关键字. async放在方法中存在await代码的方法中,await放在调用返回Task的方法前. class Class1 { pr ...

  4. Extjs的API阅读方式(整理)

    原文链接:http://www.cnblogs.com/gaojun/archive/2013/05/28/3103908.html

  5. 【SSH】——Struts2中的动态方法调用(一)

    首先我们来看一个简单的调用: 1.在web.xml中配置拦截器StrutsPrepareAndExecuteFilter.StrutsPrepareAndExecuteFilter实现了filter接 ...

  6. TCP的挥手协议和握手协议2

    三次握手协议:三次握手协议的主要过程是交互彼此之间的初始序列号,如果没有确认的ACK帧可以么?肯定是可以的 client A -------> server B client A 发送了自己的初 ...

  7. zTree基本功能[core]

    zTree 是一个依靠jQuery实现的多功能"树插件".优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. zTree v3.0 将核心代码按照功能进行了分割,不需 ...

  8. 浅谈javascript的原型及原型链

    浅谈javascript的原型及原型链 这里,我们列出原型的几个概念,如下: prototype属性 [[prototype]] __proto__ prototype属性 只要创建了一个函数,就会为 ...

  9. 【转】C#获取当前路径7种方法

    webformvar s = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; //C盘 IIS路径 var s1 ...

  10. AOJ.559 丢失的数字

    丢失的数字 Time Limit: 1000 ms Memory Limit: 64 MB Total Submission: 1552 Submission Accepted: 273 Descri ...