opencv使用2

老规矩,先引用头文件,看情况引用

#include <opencv2/opencv.hpp>
#include <iostream>
#include "opencv2/highgui.hpp"
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/core.hpp>
#include <opencv2/objdetect.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui/highgui_c.h>
using namespace std;
using namespace cv;

1.图像翻转

获取图像后,通过flip翻转,此方法同样适用于视频帧的翻转
注意:翻转后的图片,如果用于识别二维码,会识别不到。

flip函数是矩阵或者图像翻转,其实图像的本质也是矩阵。

flip(Mat src, Mat dst, int flipCode)

flipCode,翻转模式,flipCode==0垂直翻转(沿X轴翻转),flipCode>0水平翻转(沿Y轴翻转),flipCode<0水平垂直翻转(先沿X轴翻转,再沿Y轴翻转,等价于旋转180°)

int main(){Mat start=imread("start.jpg", -1);  //读取图片Mat tempimage;                               //实例化一个Mat,用来存放翻转后的图片flip(start,tempimage,1);                   //第一个参数为初始Mat,第二个参数为翻转后的Matimshow("原图",start);imshow("翻转后的图",tempimage);waitKey(0);                            //一直等待}

2.图像截取

获取原图像后,通过rect指定一个方块,然后copyto 另一个图像
代码如下

int main(){Mat start=imread("start.jpg", -1);  //读取图片Mat tempimage;                               //实例化一个Mat,用来存放截取后的图片Rect r1(681,151,400,400);          //定义一个r1的区域,前两个参数为区域左上角的X,Y坐标,后两个为区域的宽和高start(r1).copyTo(tempimage);      //截取start图片 r1区域的图像,并放到tempimage里imshow("原图",start);imshow("截取后的图",tempimage);waitKey(0);                            //一直等待}

3.图像旋转任意角度

获取原图像后,指定一个旋转中心点,一个旋转角度,就可以玩转图片

int main(){Mat start=imread("start.jpg", -1);  //读取图片Mat tempimage;                               //实例化一个Mat,用来存放旋转后的图片Point center = Point(start.cols / 2, start.rows / 2);    //指定一个旋转中心点,我这边指定的是图片中心点int angle=90;Mat affine_matrix = getRotationMatrix2D(center, angle, 1.0);    //定义旋转矩阵warpAffine(rgb_image, tempimage, affine_matrix, rgb_image.size());    //仿射变换,将旋转后的图存到tempimage里面imshow("原图",start);imshow("旋转后的图",tempimage);waitKey(0);                            //一直等待}

warpAffine后面还有好几个参数可以设置,具体如下,有兴趣可以深入研究一下。最后一个参数可以设置填充色,默认填充色为黑色。Scalar(255,255,255)为白色

warpAffine(rgb_image, tempimage, affine_matrix, rgb_image.size(),1,0,Scalar(255,255,255));    //仿射变换,将旋转后的图存到tempimage里面
void cv::warpAffine  (   InputArray  src,OutputArray     dst,InputArray  M,Size  dsize,int   flags = INTER_LINEAR,int   borderMode = BORDER_CONSTANT,const Scalar &    borderValue = Scalar() )

src:输入图像
dst:输出图像
M:旋转矩阵
dsize:输出图像的尺寸
flags:插值方法,默认为线性插值(这里可以添加 WARP_INVERSE_MAP 使得转换变为从 dst 转到 src)
borderMode:像素外推法(默认为 BORDER_CONSTANT)
borderValue :当时像素外推法设定为 BORDER_CONSTANT 时候,此处可以设定具体的 border 值,默认为 0

嵌入式c c++开发笔记(opencv图片,视频的翻转,截取,旋转)相关推荐

  1. python opencv 图片/视频 拼接

    python opencv 图片/视频 拼接 # coding: utf-8 # 像写诗一样写代码 import numpy as np import cv2img_A_path = "C: ...

  2. 嵌入式Linux系统开发笔记(七)

    嵌入式Linux系统开发笔记(七) 七.U-Boot基础 1.概述 在移植 Linux之前我们需要先移植一个 bootloader 代码,这个 bootloader 代码用于启动 Linux 内核, ...

  3. 【嵌入式硬件芯片开发笔记】4-20mA DAC芯片AD5421配置流程

    [嵌入式硬件芯片开发笔记]4-20mA DAC芯片AD5421配置流程 16位.串行输入.环路供电.4 mA至20 mA DAC 可用于HART协议相关电路 同AD5700配合使用 AD5421的SP ...

  4. 【嵌入式硬件芯片开发笔记】HART调制解调器AD5700芯片配置流程

    [嵌入式硬件芯片开发笔记]HART调制解调器AD5700芯片配置流程 低功耗HART调制解调器 适用于AD5700/AD5700-1 我的是XTAL_EN接地,CLK_CFG的两个引脚由同一个GPIO ...

  5. 【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程

    [嵌入式硬件芯片开发笔记]HART协议调制解调芯片AD5700配置流程 XTAL_EN接地,CLK_CFG的两个引脚由同一个GPIO控制 初始时HART_CLK_CFG输出低电平 由RTS引脚控制调制 ...

  6. 嵌入式Linux系统开发笔记(二)

    嵌入式Linux系统开发笔记(二) 二.Linux C 编程 1.设置VI编辑器TAB 键为 4 字节 VI 编辑器默认 TAB 键为 8 空格,我们改成 4 空格,用 vi 打开文件/etc/vim ...

  7. 嵌入式c c++开发笔记(opencv两图像叠加)

    两图像叠加 可以是两个图片,也可以是视频和图片 先引用头文件 #include <opencv2/opencv.hpp> // Include OpenCV API #include &l ...

  8. 【音视频开发笔记】音视频基础

    音频基础 声音的定义 声音是振动产生的声波,通过介质(气体.固体.液体)传播并能被人或动物听觉器官所感知的波动现象. 如何分析声音 我们通常听见的声音,是由于物体振动导致空气分子按照一定的频率产生疏密 ...

  9. 安卓开发笔记——关于图片的三级缓存策略(内存LruCache+磁盘DiskLruCache+网络Volley)...

    在开发安卓应用中避免不了要使用到网络图片,获取网络图片很简单,但是需要付出一定的代价--流量.对于少数的图片而言问题不大,但如果手机应用中包含大量的图片,这势必会耗费用户的一定流量,如果我们不加以处理 ...

  10. 《嵌入式系统 - RT-Thread开发笔记》手把手教你使用RT-Thread制作GD32 RISC-V系列BSP

    熟悉RT-Thread的朋友都知道,RT-Thread提供了许多BSP,但不是所有的板子都能找到相应的BSP,这时就需要移植新的BSP.RT-Thread的所有BSP中,最完善的BSP就是STM32系 ...

最新文章

  1. Git学习笔记07-删除文件
  2. 数据不够怎么训练深度学习模型?不妨试试迁移学习 ——重用神经网络的结构2...
  3. python一点基础都没有的怎么办-Python基础常见问题总结(一)
  4. cout 输出指定位数,不足补0
  5. Spring Cloud Gateway 源码解析(3) —— Predicate
  6. Android (cocos2dx 网络访问)访问权限设置
  7. ios APP进程杀死之后和APP在后台接收到推送点击跳转到任意界面处理
  8. 【python】 调用selenium中 ChromeDriver不匹配的问题
  9. python pil怎么调用_python3如何使用pil
  10. 我所熟悉的网站负载均衡技术之硬件篇
  11. 春节返乡,到底返的是什么?
  12. 解决办法:atoi不能将CString 转化为char *
  13. 3.新建页面以及添加路由 2021-07-11
  14. DOS 批处理高级教程精选合编20080331
  15. postgresql用户和角色
  16. 面试题:spring的循环依赖问题以及如何解决
  17. 【转载】20个2013年最值得关注的网页设计趋势
  18. 蓝桥杯刷题冲刺 | 倒计时28天
  19. 游戏开发中常用的算法1(20道题一篇文章)
  20. html中设置页面正在加载,在加载Web页面时显示正在等待的窗体

热门文章

  1. 3D点云深度学习综述
  2. 视频水印去除工具哪个好
  3. 用计算机如何打对数,怎样使用科学计算器计算对数?
  4. 职称计算机辅导软件,职称计算机辅导:WindowsXP辅助工具
  5. I.Algorithm Choosing Mushrooms
  6. 趋高机器视觉之机械手臂的应用
  7. Caffe学习笔记(一):CIFRA-10在Caffe上进行训练学习
  8. Java NIO笔记05
  9. python所需各种库(.whl)文件网址,不用下载其它运行库,直接pip install .....whl
  10. html中添加cnzz,vue中移动端网页 H5网站 添加到 友盟 cnzz的方法