Opencv笔记(一):图像的基本操作
1.图像的读、显示和保存操作
import cv2
img = cv2.imread('filename',0);
cv2.imshow('name',img);
k=cv2.waitKey(0);
if k==27:
cv2.destroyAllWindows();
elif k==ord('s'):
cv2.imwrite('filename',img);
cv2.destroyAllWindows();
- cv2.imread('a',b)是图片读入函数,参数a是图片的存放路径,b是读取的方式,若b=0,则读取到一张灰度图,若为1则读取到一张彩色图。特别注意的是图片的存放路径要完整,不然会出现下面的错误。
cv2.error: /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/highgui/src/window.cpp:269: error: (-215) size.width>0 && size.height>0 in function imshow
- cv2.imshow('a',b)是一个图片显示函数。参数a是自个定义的窗口名字,b是读取的图像。这个函数建立的窗口会自动随图片的大小而调整大小。
- cv2.waitKey(a) 是一个键盘绑定函数。需要指出的是它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。一般a写为0,这样会无限等待键盘的输入,没有返回值。如果a<0,则无限等待且返回值为按键值。如果a>0,那么超过指定时间返回-1。
- cv2.destroyAllWindows()是一个可以轻易删除任何我们建立的窗口。如果你想删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删除的窗口名。
- ord('a')是一个将字符转为对应的ASCII码。
- cv2.imwrite('a',b)是一个图片保存函数,a是你自个取的文件名及其存放路径,b是保存的对象。
2.获取图像的属性
import cv2
img = cv2.imread('filename',1)
print img.size
#1557504
print img.shape
#(832, 624, 3)
print img.dtype
#uint8
- img.size()函数返回图像的像素数目
- img.shape()函数可以获取图像的形状。他的返回值是一个包含行数,列数,通道数的元组。
- img.dtype()函数返回图像的数据类型。注意:在除虫(debug)时 img.dtype 非常重要。因为在 OpenCV-
Python 代码中经常出现数据类型的不一致。
3.图像的缩放
img=cv2.imread('wyg.jpg')
res=cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
#将图片扩展成原来的2倍
#or
height,width=img.shape[:2]
res=cv2.resize(img,(2*width,2*height),interpolation=cv2.INTER_CUBIC)
- cv2.resize(src, dst, interpolation=CV_INTER_LINEAR)函数有三个参数,第一个参数src为要缩放的对象,第二个参数dst可以是缩放因子fx,fy,也可以直接写生成图像的大小。第三个参数是指选择的插值方法,缩放是使用cv2.INTER_AREA,扩展时使用cv2.INTER_CUBIC。
4.图像的平移
若知道图片的移动方向(x,y),移动的距离为(tx,ty),则可以创建矩阵:M = [ [1 0 tx] [0 1 ty] ],存为np.float32类型放入numpy的数组中。
import cv2
import numpy as np
img = cv2.imread('wyg.jpg',0)
rows,cols = img.shape
M = np.float32([[1,0,100],[0,1,50]])
dst = cv2.warpAffine(img,M,(col,rows))
cv2.imshow('opencv',dst)
cv2.waitKey(0)
cv2.destoryAllwindows()
- cv2.warpAffine(a,b,c)平移函数有三个参数,a是平移的对象,b是平移矩阵,即M,c是输出图片的尺寸,它的格式
应该是图像的(宽,高)。应该记住的是图像的宽对应的是列数,高对应的是行数。
5.图像的旋转
import cv2
import numpy as np
img=cv2.imread('wyg.jpg',0)
rows,cols=img.shape
# 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
# 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6)
# 第三个参数是输出图像的尺寸中心
dst=cv2.warpAffine(img,M,(2*cols,2*rows))
cv2.imshow('img',dst)
cv2.destroyAllWindows()
6.图像的仿射变换
在仿射变换中,原图中所有的平行线在结果图像中同样平行。为了创建这个矩阵我们需要从原图像中找到三个点以及他们在输出图像中的位置。然后cv2.getAffineTransform 会创建一个 2x3 的矩阵,最后这个矩阵会被传给函数 cv2.warpAffine。
import cv2
import numpy as np
img=cv2.imread('wyg.jpg')
rows,cols,ch=img.shape
pts1=np.float32([[50,50],[200,50],[50,200]])
pts2=np.float32([[10,100],[200,50],[100,250]])
M=cv2.getAffineTransform(pts1,pts2)
dst=cv2.warpAffine(img,M,(cols,rows))
cv2.imshow('opencv',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
Opencv笔记(一):图像的基本操作的更多相关文章
- OpenCV学习笔记(3)——图像的基本操作
获取图像的像素值并修改 获取图像的属性(信息) 图像的ROI() 图像通道的拆分及合并 1.获取并修改像素值 先读入图像装入一个图像实体,然后该实体相当于一个多维list,可以直接用数组操作提取像素信 ...
- opencv笔记2:图像ROI
time:2015年 10月 03日 星期六 12:03:45 CST # opencv笔记2:图像ROI ROI ROI意思是Region Of Interests,感兴趣区域,是一个图中的一个子区 ...
- Python下opencv使用笔记(图像频域滤波与傅里叶变换)
Python下opencv使用笔记(图像频域滤波与傅里叶变换) 转载一只程序喵 最后发布于2018-04-06 19:07:26 阅读数 1654 收藏 展开 本文转载自 https://blog ...
- opencv入门系列教学(五)图像的基本操作(像素值、属性、ROI和边框)
0.序言 每个图像是由一个个点组成的,而这些点可以表示为像素值的形式. 这篇博客里我们将学会: 访问像素值并修改它们 . 访问图像属性 . 设置感兴趣区域(ROI) . 分割和合并图像. 对于图像的基 ...
- OpenCV笔记大集锦(转载)
整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN数量:55篇博文网址: ...
- opencv笔记6:角点检测
time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...
- opencv笔记5:频域和空域的一点理解
time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ...
- opencv笔记4:模板运算和常见滤波操作
time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...
- opencv笔记3:trackbar简单使用
time:2015年 10月 03日 星期六 13:54:17 CST # opencv笔记3:trackbar简单使用 当需要测试某变量的一系列取值取值会产生什么结果时,适合用trackbar.看起 ...
- opencv笔记1:opencv的基本模块,以及环境搭建
opencv笔记1:opencv的基本模块,以及环境搭建 安装系统 使用fedora22-workstation-x86_64 安装opencv sudo dnf install opencv-dev ...
随机推荐
- Innodb特性以及实现原理
Innodb五大特性 1.insert buffer2.double write3.自适应哈希索引4.异步io5.邻接页刷新 1.insert buffer(change buffer) 作用:将非聚 ...
- c++的符号表的肤浅认识
符号表是编译期产生的一个hash列表,随着可执行文件在一起 示例程序 int a = 10; int b; void foo(){ static int c=100; } int main(){ in ...
- 常用函数式接口与Stream API简单讲解
常用函数式接口与Stream API简单讲解 Stream简直不要太好使啊!!! 常用函数式接口 Supplier<T>,主要方法:T get(),这是一个生产者,可以提供一个T对象. C ...
- 了解redis
redis:非关系型数据库,基于内存高性能,key-value存储,一般用作缓存,开源的使用ANSI C语言编写,遵守BSD协议,支持网络,可基于内存亦可持久化的日志型.Key-Value数据库,并提 ...
- MySql 的操作指令(window)
1.登录: mysql -uroot -p 2.查看所有数据库: show databases 3.切换数据库 : use databasename(数据库名称) 4.查看数据库的所有表格 ...
- 18 12 `12 WSGI 协议
所谓wsig 协议 就是把web框架 和服务器进行分开 然后通过 wisg协议 进行连接 这样子可以随时替换web框架 或者 更换服务器 解耦 (现在学的内容里 静态连接一般是放在服务器里 ...
- Python调用OpenCV读显写
OpenCV提供了python的接口,而且很重要的一点是python下的很多接口名与C++的接口名是一样的,这一篇先记录python调用OpenCV去读取图像.显示图像和保存图像. 1.OpenCV读 ...
- 7. react 基础 - React Developer Tools 的安装 及 使用
1. 安装 react 开发调试工具 React Developer Tools 打开 chrome 浏览器访问 chrome://extensions/ 点击右上角的 拓展程序 -> 打开 c ...
- WOJ 1538 Stones II 转化背包问题
昨天是我负责这个题目的,最后没搞出来,真的给队伍拖后腿了. 当时都推出来了 我假设最后结果是取了m个物品,则我把这个m个物品按取的先后编号为 k1 k2 k3 k4...km 则最终结果就是 (k1. ...
- CAD快捷键大全