用Opencv打开摄像头,进行二值化和边缘检测处理,并保存视频

赵同学 2015-07-07 05:28:07
现在能用Opencv打开电脑的摄像头,然后也能保存下来。而要实现的功能却是先打开摄像头,进行二值化和边缘检测处理,再保存下来的图像,也就是保存下来的图像是经过处理的视频文件
...全文
546 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-07-07
  • 打赏
  • 举报
回复
建议楼主先编译链接调试OpenCV自带的相关例子代码。
本书针的读者是高校学生,科研工作者,图像处理爱好者。对于这些 人群,他们往往是带着具体的问题,在苦苦寻找解决方案。为了一个小问 题就让他们去学习 C++ 这么深奥的语言几乎是不可能的。而 Python 的悄 然兴起给他们带来的希望,如果说 C++ 是 tex 的话,那 Python 的易用性 相当于 word。他们可以很快的看懂本书的所有代码,并可以学着使用它们 来解决自己的问题,同时也能拓展自己的视野。别人经常说 Python 不够 快,但是对于上面的这些读者,我相信这不是问题,现在我们日常使用的 PC 机已经无比强大了,而且绝大多数情况下不会用到实时处理,更不会在 嵌入式设备上使用。因此这不是问题。 本书目录: 目录 I 走进 OpenCV 10 1 关于 OpenCV-Python 教程 10 2 在 Windows 上安装 OpenCV-Python 11 3 在 Fedora 上安装 OpenCV-Python 12 II OpenCV 中的 Gui 特性 13 4 图片 13 4.1 读入图像 4.2 显示图像 4.3 保存图像 4.4 总结一下 5 视频 5.1 用摄像头捕获视频 5.2 从文件中播放视频 5.3 保存视频 6 OpenCV 中的绘图函数 6.1 画线 6.2 画矩形 6.3 画圆 6.4 画椭圆 6.5 画多边形 6.6 在图片上添加文字 7 把鼠标当画笔 7.1 简单演示 7.2 高级一点的示例 8 用滑动条做调色板 8.1 代码示例 III 核心操作 9 图像的基础操作 9.1 获取并修改像素值 9.2 获取图像属性 9.3 图像 ROI 9.4 拆分及合并图像通道 9.5 为图像扩边(填充) 10图像上的算术运算 10.1图像加法 10.2图像混合 10.3按位运算 11程序性能检测及优化 11.1使用 OpenCV 检测程序效率 11.2OpenCV 中的默认优化 11.3在 IPython 中检测程序效率 11.4更多 IPython 的魔法命令 11.5效率优化技术 12OpenCV 中的数学工具 IV OpenCV 中的图像处理 13颜色空间转换 54 13.1转换颜色空间 13.2物体跟踪 13.3怎样找到要跟踪对象的 HSV 值? 14几何变换 14.1扩展缩放 14.2平移 14.3旋转 14.4仿射变换 14.5透视变换 15图像阈值 15.1简单阈值 15.2自适应阈值 15.3Otsu’s 二值化 15.4Otsu’s 二值化是如何工作的? 16图像平滑 16.1平均 16.2高斯模糊 16.3中值模糊 16.4双边滤波 17形态学转换 17.1腐蚀 17.2膨胀 17.3开运算 17.4闭运算 17.5形态学梯度 17.6礼帽 17.7黑帽 17.8形态学操作之间的关系 18图像梯度 18.1Sobel 算子和 Scharr 算子 87 18.2Laplacian 算子 19Canny 边缘检测 19.1原理 19.1.1噪声去除 19.1.2计算图像梯度 19.1.3非极大值抑制 19.1.4滞后阈值 19.2OpenCV 中的 Canny 边界检测 20图像金字塔 94 20.1原理 21OpenCV 中的轮廓 22直方图 23图像变换 24模板匹配 25Hough 直线变换 26Hough 圆环变换 27分水岭算法图像分割 28使用 GrabCut 算法进行交互式前景提取 29理解图像特征 30Harris 角点检测 31Shi-Tomasi 角点检测 & 适合于跟踪的图像特征 32介绍 SIFT(Scale-Invariant Feature Transform) 33介绍 SURF(Speeded-Up Robust Features) 34角点检测的 FAST 算法 35BRIEF(BinaryRobustIndependentElementaryFeatures) 36.1OpenCV 中的 ORB 算法 37特征匹配 38使用特征匹配和单应性查找对象 39Meanshift 和 Camshift 40.3OpenCV 中的 Lucas-Kanade 光流 41背景减除 238 41.1基础 42摄像机标定 43姿势估计 44对极几何(Epipolar Geometry) 45立体图像中的深度地图 259 45.1基础 46K 近邻(k-Nearest Neighbour ) 47支持向量机 48K 值聚类 49图像去噪 50图像修补 51使用 Haar 分类器进行面部检测
配套示例程序清单 示例程序序号 程序说明 对应章节 1 OpenCV环境配置的测试用例 1.3.8 2 快速上手OpenCV的第一个程序:图像显示 1.4.1 3 快速上手OpenCV的第二个程序:图像腐蚀 1.4.2 4 快速上手OpenCV的第三个程序:blur图像模糊 1.4.3 5 快速上手OpenCV的第四个程序:canny边缘检测 1.4.4 6 读取并播放视频 1.5.1 7 调用摄像头采集图像 1.5.2 8 官方例程引导、赏析之彩色目标跟踪:Camshift 2.1.1 9 官方例程引导、赏析之光流:optical flow 2.1.2 10 官方例程引导、赏析之点追踪:lkdemo 2.1.3 11 官方例程引导、赏析之人脸识别:objectDetection 2.1.4 12 官方例程引导、赏析之支持向量机:支持向量机引导 2.1.5 13 官方例程引导、赏析之支持向量机:处理线性不可分数据 2.1.5 14 printf函数的用法示例 2.6.2 示例程序序号 程序说明 对应章节 15 用imwrite函数生成png透明图 3.1.8 16 综合示例程序:图像的载入、显示与输出 3.1.9 17 为程序界面添加滑动条 3.2.1 18 鼠标操作示例 3.3 19 基础图像容器Mat类的使用 4.1.7 20 用OpenCV进行基本绘图 4.3 21 操作图像中像素的方法一:用指针访问像素 5.1.5、5.1.6 22 操作图像中像素的方法二:用迭代器操作像素 5.1.5、5.1.6 23 操作图像中像素的方法三:动态地址计算 5.1.5、5.1.6 24 遍历图像中像素的14种方法 5.1.6 25 初级图像混合 5.2.4 26 多通道图像混合 5.3.3 27 图像对比度、亮度值调整 5.4.3 28 离散傅里叶变换 5.5.8 29 XML和YAML文件的写入 5.6.3 30 XML和YAML文件的读取 5.6.4 31 方框滤波:boxFilter函数的使用 6.1.11 32 均值滤波:blur函数的使用 6.1.11 33 高斯滤波:GaussianBlur函数的使用 6.1.11 34 综合示例:图像线性滤波 6.1.12 35 中值滤波:medianBlur函数的使用 6.2.4 36 双边滤波:bilateralFilter函数的使用 6.2.4 37 综合示例:图像滤波 6.2.5 38 膨胀:dilate函数的使用 6.3.5 39 腐蚀:erode函数的使用 6.3.5 40 综合示例:腐蚀与膨胀 6.3.6 41 用morphologyEx()函数实现形态学膨胀 6.4.8 42 用morphologyEx()函数实现形态学腐蚀 6.4.8 43 用morphologyEx()函数实现形态学开运算 6.4.8 44 用morphologyEx()函数实现形态学闭运算 6.4.8 示例程序序号 程序说明 对应章节 45 用morphologyEx()函数实现形态学梯度 6.4.8 46 用morphologyEx()函数实现形态学“顶帽” 6.4.8 47 用morphologyEx()函数实现形态学“黑帽” 6.4.8 48 综合示例:形态学滤波 6.4.9 49 漫水填充算法:floodFill函数 6.5.3 50 综合示例:漫水填充 6.5.4 51 尺寸调整:resize()函数的使用 6.6.5 52 向上采样图像金字塔:pyrUp()函数的使用 6.6.6 53 向下采样图像金字塔:pyrDown()函数的使用 6.6.6 54 综合示例:图像金字塔与图片尺寸缩放 6.6.7 55 示例程序:基本阈值操作 6.7.3 56 Canny边缘检测 7.1.2 57 Sobel 算子的使用 7.1.3 58 Laplacian算子的使用 7.1.4 59 Scharr滤波器 7.1.5 60 综合示例:边缘检测 7.1.6 61 标准霍夫变换:HoughLines()函数的使用 7.2.4 62 累计概率霍夫变换:HoughLinesP()函数 7.2.5 63 霍夫圆变换:HoughCircles()函数 7.2.8 64 综合示例:霍夫变换 7.2.9 65 实现重映射:remap()函数 7.3.3 66 综合示例程序:实现多种重映射 7.3.4 67 仿射变换 7.4.5 68 直方图均衡化 7.5.3 69 轮廓查找 8.1.3 70 查找并绘制轮廓 8.1.4 71 凸包检测基础 8.2.3 72 寻找和绘制物体的凸包 8.2.4 73 创建包围轮廓的矩形边界 8.3.6 74 创建包围轮廓的圆形边界 8.3.7 示例程序序号 程序说明 对应章节 75 使用多边形包围轮廓 8.3.8 76 图像轮廓矩 8.4.4 77 分水岭算法的使用 8.5.2 78 实现图像修补 8.6.2 79 H-S二维直方图的绘制 9.2.3 80 一维直方图的绘制 9.2.4 81 RGB三色直方图的绘制 9.2.5 82 直方图对比 9.3.2 83 反向投影 9.4.7 84 模板匹配 9.5.3 85 实现Harris角点检测:cornerHarris()函数的使用 10.1.4 86 harris角点检测与绘制 10.1.5 87 Shi-Tomasi角点检测 10.2.3 88 亚像素级角点检测 10.3.3 89 SURF特征点检测 11.1.6 90 SURF特征提取 11.2.3 91 使用FLANN进行特征点匹配 11.3.3 92 FLANN结合SURF进行关键点的描述和匹配 11.3.4 93 SIFT配合暴力匹配进行关键点描述和提取 11.3.5 94 寻找已知物体 11.4.3 95 利用ORB算法进行关键点的描述与匹配 11.5.4
## 1.图像基本操作 ### 1.1 图像构成 * 一般分为有颜色图像和无颜色图像 * 像素点在[0,255]之间,值越小越黑,反之亦然 * 彩色图像:有颜色通道,一般读取的图像即为(h,w,c) * 如RGB,BGR:(xx,xx,xx) * 灰度图像:即无通道,一般读取的图像即为(h,w) ### 1.2 数据读取-图像 import cv2 opencv读取的彩色图片的颜色通道格式是BGR 所以如果要用其他函数展示opencv读取的图片,最好要转变成相同的格式,如RGB,BGR等 * img = cv2.imread(filepath,cv2.IMREAD_COLOR) * cv2.IMREAD_COLOR:彩色图像 * cv2.IMREAD_GRAYSCALE:灰度图像 * 一般显示图片 ''' def cv_show(name,img): cv2.imshow(name,img) cv2.waitKey(0) cv2.destroyAllWindows() ''' ### 1.3 数据读取-视频 * cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。 * 如果是视频文件,直接指定好路径即可。 * 具体代码看文件! ### 1.4 截取部分图像数据 也即处理nparray数据,对应位置切片即可 * cat=img[0:50,0:200] ### 1.5 颜色通道提取 * b,g,r=cv2.split(img) or * b1,g1,r1=img[:,:,0],img[:,:,1],img[:,:,2] ### 1.6 边界填充 * cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType) * borderType: - BORDER_REPLICATE:复制法,也就是复制最边缘像素。 - BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb - BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba - BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg - BORDER_CONSTANT:常量法,常数值填充。 ### 1.7 数值计算 ''' 相当于% 256 防止超过255,则进行mod运算,防止溢出 (img_cat + img_cat2)[:5,:,0] ''' '''' 防止超过255,则进行取上界运算,防止溢出 cv2.add(img_cat,img_cat2)[:5,:,0] ''' ### 1.8 图像融合 要相同大小的图片才可以进行 * img_dog = cv2.resize(img_dog, (500, 414)) ‘’‘ R = a*x1+b*x2+b 融合的方式:有权重有偏置 res = cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0) 重新改变大小,进行比值计算 x4倍,y4倍扩大 res = cv2.resize(img, (0, 0), fx=4, fy=4) plt.imshow(res) ’‘’ ## 2.图像处理 ### 2.1 图像阈值 #### ret, dst = cv2.threshold(src, thresh, maxval, type) - src: 输入图,只能输入单通道图像,通常来说为灰度图 - dst: 输出图 - ret: 返回阈值 - thresh: 阈值 - maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值 - type:二值化 -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧