前面使用OpenCV创建了一个简单的视频播放器。下面做点更有趣的事情。 许多基本的视觉任务涉及将滤镜应用于视频。下面修改程序,在播放视频时,对其进行简单的操作。

一个简单的操作是平滑图像,通过高斯或其他类似的核函数进行卷积来有效地减少图像的信息。

例5。 在图像显示在屏幕上之前加上高斯平滑操作

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
int main(int argc, char** argv)
{namedWindow("例5——平滑前", 0);namedWindow("例5——平滑后", 0);VideoCapture cap;cap.open("E:/ 1.mp4");Mat frame;for (;;){cap >> frame;if (frame.empty()) break;Mat smoothImage;GaussianBlur(frame, smoothImage, cv::Size(9, 9), 3, 3);imshow("例5——平滑前", frame);imshow("例5——平滑后", smoothImage);if (waitKey(33) >= 0)break;}return 0;
}

与前面的例子没有什么不同,只是在显示前加了一个高斯模糊。首先声明一个Mat变量smoothImage, GaussianBlur()时使用它得到模糊的结果。输入图像被9×9高斯卷积滤波。高斯内核的大小应始终为奇数,因为高斯内核是以该区域的中心像素计算的。

接下来,再演示一下另一个函数下采样函数怎么用。如果多次对图像进行下采样,会形成一个计算机视觉中常用的尺度空间(也称为图像金字塔),以观察场景或物体的不同尺度下得到变化。

对图像进行下采样相当于一系列卷积。这种采样将高频信号引入到所产生的信号(图像)中。 为了避免这种情况,首先对图像进行高通滤波以限制它的频率,使它们都低于采样频率。 在OpenCV中,下采样由pyrDown()函数完成,例6中演示了这个函数的使用。

例6。 使用pyrDown()创建一个新图像,该图像是输入图像宽度和高度的一半

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv)
{Mat img1, img2;namedWindow("例6_1", 0);namedWindow("例6_2", 0);img1 = imread("E:/1.jpg",-1);imshow("例6_1", img1);pyrDown(img1, img2); imshow("例6_2", img2);int img1_width, img1_height, img2_width, img2_height;img1_width = img1.cols;img1_height = img1.rows;img2_width = img2.cols;img2_height = img2.rows;cout << "img1尺寸-------width=" << img1_width << "------height=" << img1_height << endl;cout << "img2尺寸-------width=" << img2_width << "------height=" << img2_height << endl;cv::waitKey(0);return 0;
}

这个图将控制台输出结果和图像显示结果同时截图放在一起的,从控制台输出的图像尺寸可以看到,通过下采样,图像大小缩小了,高宽同时缩小了一半。

下面继续演示函数的用法,采用Canny边缘检测Canny()函数对图像进行边缘检测。边缘检测需要单通道图像,因此首先通过cvtColor()函数将图像转换为单通道灰度图像。例7是具体的代码实现。

例7。 Canny边缘检测器将其输出写入单通道(灰度)图像

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv)
{Mat src, src_gray, cannyImg;namedWindow("例7_原图", 0);namedWindow("例7_灰度图", 0);namedWindow("例7_Canny图", 0);src = imread("E:/1.jpg", -1);cvtColor(src, src_gray, cv::COLOR_RGB2GRAY);Canny(src_gray, cannyImg, 30, 80);imshow("例7_原图", src);imshow("例7_灰度图", src_gray);imshow("例7_Canny图", cannyImg);cv::waitKey(0);return 0;
}

上面涉及到了三个操作函数,大家可以试着将这三个函数连起来对同一个图像进行操作,看下图像处理的效果,在实际使用中,也是这样将各种图像处理函数串起来实现最终的效果。对于canny()函数,也可以试一下不同的输入参数,看得到的结果有什么不同。

下面再做一个有趣的事情,将图像的颜色改变一下,从中可以了解下怎么操作图像中每个像素点的数据。例8展示了像素值的简单方法。这里修改的是三通道图像,如果看过前面介绍的图像处理基础,应该对三通道图像有一定的了解,

例8。 修改图像的像素值

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv)
{Mat src = imread("E:/1.jpg", 1);Mat modifyImg = Mat(src.size(), src.type());//新建一个与src大小、类型相同的空白图像namedWindow("例8_原图", 0);imshow("例8_原图", src);int height = src.rows;//图片的高度int width = src.cols;//图片的宽度for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){modifyImg.at<Vec3b>(i, j)[0] = 255 - src.at<Vec3b>(i, j)[0];modifyImg.at<Vec3b>(i, j)[1] = 255 - src.at<Vec3b>(i, j)[1];modifyImg.at<Vec3b>(i, j)[2] = 255 - src.at<Vec3b>(i, j)[2];}}namedWindow("例8_修改图", 0);imshow("例8_修改图", modifyImg);waitKey(0);return 0;
}

cvtcolor函数_5 OpenCV几个函数操作实例相关推荐

  1. Matlab的round函数和OpenCV的cvRound函数的区别

    Matlab的round函数和OpenCV的cvRound函数都是获得浮点数最近的整数. 今天在调试项目时发现Matlab代码运行结果和C++代码运行结果略有出入,最后定位到Matlab的round函 ...

  2. 中imshow函数用法_5 OpenCV几个函数操作实例

    前面使用OpenCV创建了一个简单的视频播放器.下面做点更有趣的事情. 许多基本的视觉任务涉及将滤镜应用于视频.下面修改程序,在播放视频时,对其进行简单的操作. 一个简单的操作是平滑图像,通过高斯或其 ...

  3. python compare函数_Python Opencv中用compareHist函数进行直方图比较对比图片

    图像直方图 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的.纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比. 图像是由像素 ...

  4. imfilter c语言,opencv中cvFilter2D( ) 函数filter2D()函数与MATLAB中imfilter()函数的差异...

    出处: 1:cvFilter2D() 函数为opencv中c语言函数 2:filter2D()函数为opencv中c++函数 3:imfilter()函数为matlab版本函数 计算结果的异同: 2( ...

  5. OpenCV颜色空间转换函数:cv::cvtColor介绍

    OpenCV颜色空间转换函数:cv::cvtColor介绍 Color Conversion Code(颜色转换代码) Enumerator COLOR_BGR2BGRA add alpha chan ...

  6. opencv 图像操作,常用 OpenCV 内置函数

    OpenCV 如何对图像的像素进行操作 对图像的像素进行操作,我们可以实现空间增强,反色,大部分图像特效系列都是基于像素操作等目的.先来看一下内存空间中图像矩阵,也就是Mat的矩阵数值部分是怎么存储的 ...

  7. opencv:读取、保存操作函数

    opencv中的函数使用 OpenCV图像处理-Mat对象常用方法 1.imshow()函数 imshow()函数用于在指定的窗口显示一幅图像,函数原型如下: void imshow(const st ...

  8. [548]OpenCV之cv2函数

    1.主要函数 1. cv2.imread():读入图片,共两个参数,第一个参数为要读入的图片文件名,第二个参数为如何读取图片,包括 cv2.IMREAD_COLOR:读入一副彩色图片:cv2.IMRE ...

  9. OpenCV各模块函数使用实例(5)--特征检测(Feature Detection)

    特征检测是检测图像中的特征信息,比如边缘,线段,角点位置等.在OpenCV中提供了各种特征检测函数和特征提取函数,其中包括有边缘检测(canny),角点检测等,如:Harris角点.ShiTomasi ...

  10. OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)

    OpenCV这么简单为啥不学--1.4.基础标识绘制(绘制线line函数.rectangle函数绘制四边形.circle函数绘制圆形.putText函数绘制文字.putText绘制中文文字) 目录 O ...

最新文章

  1. rancher添加私有仓库_CocoaPods搭建私有库
  2. 单调队列(一套模板通吃)
  3. 前端性能的几个基础指标
  4. mybatis_user_guide(3)XML配置
  5. 个人作业——软件工程实践总结作业(待续)
  6. 回来了,回来了,感触很深!
  7. matlab四宫格画图_科学网—Matlab画图(一):生成高质量的供发表和展示用的图 - 周建锋的博文...
  8. 开源的仿真软件HOPSAN
  9. 本地词库翻译php,有道词典词库(您也可以轻松翻译离线的有道词典词库)
  10. 计算机网络选修课体会600字,上网课的感受600字 上网课的心得体会
  11. python函数介绍(20804字的带图超详细说明)
  12. python人民币美元汇率双向兑换计算
  13. Qt创建停靠悬浮窗口
  14. 【PyG入门学习】三:信息传递机制
  15. 02前端学习之CSS3(1)
  16. 求生之路2服务器搭建(基于LinuxGSM一键完成,完美支持8人)
  17. Redis-3-Java搭建Redis
  18. Java通过FFmpeg录制屏幕
  19. VC++基于微软语音引擎开发语音识别总结
  20. 河北工程技术学院计算机应用技术,2020年春河北工程技术学院期末考试计算机应用基础试题及答案(13页)-原创力文档...

热门文章

  1. Mac Brew Uninstall MySql
  2. Silverlight socket组件
  3. 终于把W32.Spybot.Worm给消灭了(这个标题不能用了)
  4. java日期去掉时分秒,只保留年月日
  5. linux设置系统环境变量的天坑
  6. Java网络爬虫实操(6)
  7. CxImage图像库的使用
  8. Oracle如何实现跨库查询
  9. 扑克牌的完美洗牌算法
  10. 提示wininet.dll文件找不到的解决