opencv库图像基础2-python

图像的简单变换



先导入库

import cv2
import matplotlib.pyplot as plt
import numpy as np

1.图像的放大和缩小

使用函数cv2.resize()

放大图像

resized_img = cv2.resize(img,(width*2,height*2), interpolation=cv2.INTER_LINEAR)

这个代码的作用是将图像 img 的宽度和高度扩大两倍。它使用 OpenCV 库中的 cv2.resize() 函数来实现。

cv2.resize() 函数有三个参数:

img:要调整大小的图像。

dsize:调整大小后的图像的大小。它是一个元组,其中包含宽度和高度。

interpolation:插值方法。它用于在调整大小时插入新像素。

在本例中,dsize 参数的值为 (width2,height2),表示将宽度和高度扩大两倍。interpolation 参数的值为 cv2.INTER_LINEAR,表示使用双线性插值。

缩小图像

small_img = cv2.resize(img,None,fx=0.5,fy=0.5, interpolation=cv2.INTER_LINEAR)

将图片缩小为原图的一半,其中:

img 是原图。

small_img 是缩小后的图像。

fx 和 fy 是缩放比例,0.5 表示缩小一半。

interpolation 是插值方法,cv2.INTER_LINEAR 是双线性插值,是默认值。

2.图像平移

平移函数cv2.warpAffine

height,width=img.shape[:2]
M1 = np.float32([[1,0,100],[0,1,50]])
move_img = cv2.warpAffine(img,M1,(width,height))

其中:

img 是原图。

height 和 width 是原图的高度和宽度。

M1 是变换矩阵,表示平移操作。

move_img 是平移后的图像。

变换矩阵 M1 的每一行表示一个点在变换后的图像中的位置。在本例中,第一行表示原图中 (0,0) 点在变换后的图像中的位置为 (100,0),第二行表示原图中 (0,1) 点在变换后的图像中的位置为 (0,50)。

这个代码的作用是将原图 img 在右边平移 100 像素,在下平移 50 像素。

3.图像旋转

cv2.warpAffine()函数

height,width = img.shape[:2]
center = (width/2.0,height/2.0) #旋转的中心
M3 = cv2.getRotationMatrix2D(center, 180, 1) #旋转过程中没有缩放,这里180指的是顺时针180度
rotation_img = cv2.warpAffine(img,M3,(width,height))
plt.imshow(rotation_img)

4.图像仿射变换

p1=np.float32([[120,35],[215,45],[135,120]])
p2=np.float32([[135,45],[300,110],[130,230]])
M4=cv2.getAffineTransform(p1,p2) #计算一个变换矩阵
trans_img =cv2.warpAffine(img,M4,(width,height))
plt.imshow(trans_img)

5.图像裁剪

crop_img = img[20:500,200:400]
plt.imshow(crop_img)

6.图像的位运算

先创建两个图片,一个是矩形一个是圆形

矩形

rectangle=np.zeros((300,300),dtype='uint8')
rect_img=cv2.rectangle(rectangle,(25,25),(275,275),255,-1)
plt.imshow(rect_img)

输出

圆形

rectangle=np.zeros((300,300),dtype='uint8')
circle_img=cv2.circle(rectangle,(150,150),150,255,-1)
plt.imshow(circle_img)

输出



与运算

and_img=cv2.bitwise_and(rect_img,circle_img)
plt.imshow(and_img)



或运算

or_img=cv2.bitwise_or(rect_img,circle_img)
plt.imshow(or_img)



异或运算

xor_img=cv2.bitwise_xor(rect_img,circle_img)
plt.imshow(xor_img)

7.图像的分离与融合

分离

(B,G,R)=cv2.split(img)

融合

zeros = np.zeros(img.shape[:2],dtype='uint8')
plt.imshow(cv2.merge([zeros,zeros,R]))

8.颜色空间color space

灰度

gray =cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
plt.imshow(gray)

HSV,色度,饱和度,纯度

hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
plt.imshow(hsv)

lab,一个亮度通道,两个颜色通道

lab=cv2.cvtColor(img,cv2.COLOR_BGR2LAB)
plt.imshow(lab)

opencv库图像基础2-python的更多相关文章

  1. python中在计算机视觉中的库及基础用法

    基于python脚本语开发的数字图像处理包有很多,常见的比如PIL.Pillow.opencv.scikit-image等.PIL和pillow只提供了基础的数字图像处理,功能有限:OpenCV实际上 ...

  2. 使用Python+OpenCV进行图像模板匹配(Match Template)

    2017年9月22日 BY 蓝鲸 LEAVE A COMMENT 本篇文章介绍使用Python和OpenCV对图像进行模板匹配和识别.模板匹配是在图像中寻找和识别模板的一种简单的方法.以下是具体的步骤 ...

  3. opencv读取图像python和c++版本的结果不同

    问题: 在读取同一张图像时,python读取的结果和c++读取的结果差异较大,测试图像中最大误差达到16. 原因: python的opencv采用的是4.1.1,c++采用的是3.1.0,在解析JPE ...

  4. OpenCV - opencv3 图像处理 之 图像缩放( python与c++实现 )

    转自:https://www.cnblogs.com/dyufei/p/8205121.html 一. 主要函数介绍 1) 图像大小变换 cvResize () 原型: voidcvResize(co ...

  5. Python如何安装OpenCV库

    转载:https://blog.csdn.net/weixin_35684521/article/details/81953047 OpenCV的概念可百度,在此不再赘述.https://baike. ...

  6. Python的Opencv库怎么装

    原文章写于时间2019.4 当时鼓捣Opencv库弄了好长时间,前前后后弄了五天,找了好多帖子不知道删除重装了多少次,现在把我试出来正确的方法给大家分享一下. 1.Pycharm 我用的是win10系 ...

  7. python(4): regular expression正则表达式/re库/爬虫基础

    python 获取网络数据也很方便 抓取 requests 第三方库适合做中小型网络爬虫的开发, 大型的爬虫需要用到 scrapy 框架 解析 BeautifulSoup 库, re 模块 (一) r ...

  8. python安装opencv库

    1.打开anaconda prompt(安装anaconda会默认安装),键入 pip install opencv-python,如下: 2.安装过程如下所示: 3 测试是否安装成功 上述就说明安装 ...

  9. python的库有多少个?python有多少个模块?

    这里列举了大概500个左右的库: !   Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主 ...

  10. 简单的调用OpenCV库的Android NDK开发 工具Android Studio

    前言 本博客写于2017/08/11, 博主非专业搞安卓开发, 只是工作的需要倒腾了下Android NDK相关的开发, 博文中有什么不正确.不严格的地方欢迎指正哈    本文后续也许还会有删改, 就 ...

随机推荐

  1. 【解决一个小问题】macbook m2 上交叉编译 gozstd

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 已知 zstd 是一个优秀的压缩库,gozstd封装了这个 ...

  2. 小白学k8s(4)使用k8s发布go应用

    k8s发布go应用 前言 部署 镜像打包 编写yaml文件 使用ingress 什么是ingress呢 ingress与ingress-controller ingress 部署ingress 配置i ...

  3. SqlSugar导航查询/多级查询

    1.导航查询特点 作用:主要处理主对象里面有子对象这种层级关系查询 1.1 无外键开箱就用 其它ORM导航查询 需要 各种配置或者外键,而SqlSugar则开箱就用,无外键,只需配置特性和主键就能使用 ...

  4. 你天天用4G 这些基本常识都知道吗?

    不少朋友在选购4G智能手机的时候,经常可能会遇到这样的名词,五模十三频.五模十七频.双4G.移动4G.联通4G.那这些名词到底是什么意思呢?它们之间又有什么区别呢? 其实上面的这些说法其实都是比较具有 ...

  5. springboot log 没落盘

    在配置文件中增加了下面的配置并不起作用. logging.file=/xx/xx.log 是因为在 springboot 2.2 版本之后上面的采纳数已经被废弃,需要用下面新的参数: logging. ...

  6. Delphi批量替换工具Cnpack

    操,delphi官方 没有 批量替换工具,需要用到cnpack才可以,

  7. [JVM] CPU缓存一致性协议

    CPU缓存一致性协议 CPU高速缓存 CPU缓存是位于cpu和内存之间的临时数据交换器,它的容量比内存小的夺但是交换速度要比内存快得多,主要是为了解决cpu运行时的处理速度与内存读写速度不匹配的问题. ...

  8. webpack学习笔记(一)安装与试用

    由于初次接触 webpack(官网),对很多方面都不是很理解,在查找部分资料后记录一下自己的见解(本文实践基于webpack4). 1. 个人见解 简单来说,webpack就是js的 打包 工具.个人 ...

  9. CF1853

    你谷的加题速度实在太慢了 被 CF 的题目薄纱 A 可以选任意次 \(i\in [1,n]\),使 \(a[1\sim i]++,a[i+1\sim n]--\).求最少操作次数使得原数列变成非从小到 ...

  10. 跨界协作:借助gRPC实现Python数据分析能力的共享

    gRPC是一个高性能.开源.通用的远程过程调用(RPC)框架,由Google推出.它基于HTTP/2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言. 在gR ...