OpenCV-调用USB摄像机获取视频流,ROI特定提取,图像变换
来源:互联网 发布:qq空间破解软件linux 编辑:程序博客网 时间:2024/05/29 05:13
利用图像采集工具库对摄像机视频流的获取和ROI特定区域提取
#include<opencv2/opencv.hpp>using namespace cv;int main() { VideoCapture capture(0); while (1) { Mat frame; capture >> frame; namedWindow("视频图像"); imshow("视频图像", frame); waitKey(30); } return 0; }
采集到的图像如下图所示,为视频截图
0.调整窗口大小
代码如下
#include<opencv2/opencv.hpp>using namespace cv;int main() { VideoCapture capture(0); while (1) { Mat frame; capture >> frame; resize(frame, frame, Size(320, 480)); namedWindow("视频图像"); imshow("视频图像", frame); waitKey(30); } return 0; }
处理后得到图像
1 接下来对采集到的视频图像特定区域ROI裁剪
#include<opencv2/opencv.hpp>using namespace cv;int main() { VideoCapture capture(0); while (1) { Mat frame; capture >> frame; namedWindow("视频图像"); imshow("视频图像", frame); //ROI区域裁剪 Mat roi = frame(Range(220, 476), Range(180, 476)); namedWindow("roi"); imshow("roi", roi); waitKey(30); } return 0; }
很明显看出来roi区域小窗口,大小为Range(220, 476), Range(180, 476)
2 现在,我们对原图进行镜像处理
代码段如下
#include<opencv2/opencv.hpp>using namespace cv;int main(){VideoCapture capture(0);while (1){Mat frame;capture >> frame;/////////////////镜像处理//////////////////////Mat dst;flip(frame, dst,1);///////////////////////////////////////namedWindow("视频图像");imshow("视频图像", dst);waitKey(30);}return 0;}视频截图如下(与原图对比)
3 现在,对原图中心旋转
代码如下
#include<opencv2/opencv.hpp>using namespace cv;int main(){VideoCapture capture(0);while (1){Mat frame;capture >> frame;//////////////中心旋转///////////// double angle = 180;Point2f src_center(frame.cols / 2.0F, frame.rows / 2.0F); //rotate center(旋转中心坐标)Mat rot_mat = getRotationMatrix2D(src_center, angle, 1.0); //get rotate matrixMat dst;warpAffine(frame, dst, rot_mat, frame.size()); //rotate////////////////////////////////////// namedWindow("视频图像");imshow("视频图像", dst);waitKey(30);}return 0;}
视频截图如下
4 图像反转,即黑变白,白变黑,彩色图像也是可以反转的
彩色图像反转后如图
现在奉上黑白图像反转的代码(直接访问像素,对像素做更改)
#include<opencv2/opencv.hpp>using namespace cv;int main(){VideoCapture capture(0);while (1){Mat frame;capture >> frame;Mat gray;cvtColor(frame, gray, CV_BGR2GRAY);////////图像反转///////int i, j;int height, width;height = gray.rows;//行width = gray.cols*gray.channels();//列*通道数for (i = 0; i < height; i++){for (j = 0; j < width; j++){gray.at<uchar>(i, j) = 255 - gray.at<uchar>(i, j); //灰度级[0,255],反转表达式s=255-r }}/////////////////////////////////////namedWindow("反转");imshow("反转", gray);waitKey(30);}return 0;}
反转后图
注意:图像变换里面很多种变换形式,只需要改变表达式运算式,就可以实现不同形式的变换了。
假设待处理图像灰度级为【0,L-1】,反转的表达式为s=L-1-r,r为待处理图片的像素值;
对数变换的表达式为:s=c*log(1+r);
幂次变换表达式为:s=cr的γ次幂。
以此类推,就可以多种变换了
现在介绍一种更简单的,直接采用函数bitwise_not();
C++: void bitwise_not(InputArray src, OutputArray dst, InputArray mask=noArray());完整代码如下所示
#include<opencv2/opencv.hpp>using namespace cv;int main(){VideoCapture capture(0);while (1){Mat frame;capture >> frame;Mat gray;cvtColor(frame, gray, CV_BGR2GRAY);////////图像反转///////bitwise_not(gray, gray, noArray());/////////////////////////////////////namedWindow("反转");imshow("反转", gray);waitKey(30);}return 0;}
图像与上面一种处理得到的图像是一样的,自行参考
OK,部分后期再补充
1 0
- OpenCV-调用USB摄像机获取视频流,ROI特定提取,图像变换
- opencv序列图像ROI获取
- opencv提取ROI区域
- Opencv提取不规则ROI
- opencv----图像显示、ROI
- 【opencv学习笔记4】视频流的帧图像变换
- 【Opencv学习(三)】获取Mat图像的ROI区域
- 【拜小白opencv】8-感兴趣区域ROI图像获取操作
- opencv的ROI的提取
- 如何用Opencv 把视频提取的图像中特定区域的颜色读取出来?求范例程序
- OpenCV 获取ROI
- MATLAB调用USB摄像机采集图像代码段
- java opencv 获取视频变换矩阵
- OpenCV中图像设置ROI
- OpenCV ROI区域图像叠加
- Opencv ROI区域图像叠加
- 【视觉-摄像机1】opencv 调用工业摄像机(USB接口和GigE接口)
- 【原创】opencv 实现特定形状视频跟踪,图像裁剪
- cadence自带原理图库文件解析
- codevs2833 2833 奇怪的梦境(拓扑排序)
- 抽屉原理
- 解决部分乱七八糟的厂商SD卡路径乱放导致无法读取的问题
- C语言基本概念
- OpenCV-调用USB摄像机获取视频流,ROI特定提取,图像变换
- 白话经典算法系列之五 归并排序的实现(讲的真好)
- shadowsock-qt5+chrome配置,conky配置
- C#入门 错误笔记
- js 动画效果三大家族
- Modbus 功能码解析
- Leetcode-234. Palindrome Linked List
- 简要说说Linux下Git服务器架设
- 计蒜客蓝桥杯模拟赛5 礼物盒