Opencv笔记(二):图像的基本操作——续写
1.图像的透视变换
对于视角变换,我们需要一个 3x3 变换矩阵。在变换前后直线还是直线。要构建这个变换矩阵,你需要在输入图像上找 4 个点,以及他们在输出图像上对应的位置。这四个点中的任意三个都不能共线。这个变换矩阵可以有函数 cv2.getPerspectiveTransform() 构建。然后把这个矩阵传给函数cv2.warpPerspective。
import cv2
import numpy as np
img = cv2.imread('/home/wl/wyg.jpg',0)#以灰度图读入
rows,cols=img.shape
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])
M=cv2.getPerspectiveTransform(pts1,pts2)
dst=cv2.warpPerspective(img,M,(1000,1000))
cv2.imshow('opencv',dst)
cv2.imwrite('/home/wl/1.jpg',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
2.转换颜色空间
我们常用的图片颜色空间是BGR,但有时也会用到Gray、HSV、CMY等颜色空间。不同的颜色空间有着自己的特点,所以对于图片的颜色空间转换就变的尤为重要。在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会发现我们经常用到的也就两种:BGR↔Gray 和 BGR↔HSV。
import cv2
img = cv2.imread('/home/wl/wyg.jpg',1);
res = cv2.resize(img,None,fx=0.2,fy=0.2,interpolation= cv2.INTER_CUBIC )
res = cv2.cvtColor(res,cv2.COLOR_BGR2HSV )#转为HSV颜色空间
cv2.imshow('opencv',res)
cv2.imwrite('/home/wl/1.jpg',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
- cv2.cvtColor(input_image那话mage,flag)函数可以转换颜色空间,第一个参数是抓要转换颜色空间的对象,第二个参数决定转换的类型。如BGR->GRA就可以设置为cv2.COLOR_BGR2GRAY、BGR—>HSV就可以设置为cv2.COLOR_BGR2HSV
3.拆分及合并图像通道
有时我们需要对 BGR 三个通道分别进行操作。这是你就需要把 BGR 拆分成单个通道。有时你需要把独立通道的图片合并成一个 BGR 图像。你可以这样做:
import cv2
import numpy as np
img = cv2.imread('/home/wl/wyg.jpg',1)
b,g,r = cv2.split(img)
cv2.imshow('blue',b)#cv2.imshow('red',r) and cv2.imshow('green',g)
cv2.imwrite('/home/wl/1.jpg',b)
cv2.waitKey(0)
cv2.destroyAllWindows()
- cv2.split(input_image)可以将BGR拆成三个单通道。下面三个图片分别是三个通道对应的b、g、r。所以可以看出这也是将图像灰度化处理的一种方式。
img=cv2.merge((b,g,r))
- cv2.merge()可以将多个单通道合并,但不能合并多个多通道。
我们想象中的拆开的红色通道应该是红色的,蓝色通道是蓝色的,但却变成了灰度图。事实上,单通道的都是灰度图,而所谓的都变成红色只是除了红色通道外,其他的通道的值都为0。下面利用numpy实现:
import cv2
import numpy as np
img = cv2.imread('/home/wl/wyg.jpg',1)
b,g,r = cv2.split(img)
zeros =np.zeros(img.shape[:2],res.dtype)
res = cv2.merge((b,zeros,zeros))#cv2.merge((zeros,g,zeros)) or cv2.merge((zeros,zeros,r))
cv2.imshow('blue',res)
cv2.imwrite('/home/wl/1.jpg',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
4.图像扩边
如果你想在图像周围创建一个边,就像相框一样,你可以使用 cv2.copyMakeBorder()函数。这经常在卷积运算或 0 填充时被用到。
import cv2
import numpy as np
img = cv2.imread('/home/wl/wyg.jpg',1)
BLUE = [255,0,0]
df=cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)
cv2.imshow('blue',df)
cv2.imwrite('/home/wl/1.jpg',df),
cv2.waitKey(0)
cv2.destroyAllWindows()
- cv2.copyMakeBorder(input_image,top, bottom, left, right,borderType),第二到第五参数为上下左右边界的像素数目,第五个参数是边界类型,常用的有如下几种类型:
——cv2.BORDER_CONSTANT 添加有颜色的常数值边界,还需要下一个参数(value)。
——cv2.BORDER_REFLECT 边界元素的镜像。
——cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT跟上面一样,但稍作改动。
——cv2.BORDER_REPLICATE 重复最后一个元素。例如: aaaaaa|abcdefgh|hhhhhhh
第一种类型:
import cv2
import numpy as np
img = cv2.imread('6_by_6.bmp', 0) print(img)
cons =cv2.copyMakeBorder(img, 1, 1, 1, 1, cv2.BORDER_CONSTANT, value=0) print(cons)
第二种镜像类型:
default = cv2.copyMakeBorder(img, 1, 1, 1, 1, cv2.BORDER_DEFAULT)
print(default)
Opencv笔记(二):图像的基本操作——续写的更多相关文章
- OpenCV学习笔记(3)——图像的基本操作
获取图像的像素值并修改 获取图像的属性(信息) 图像的ROI() 图像通道的拆分及合并 1.获取并修改像素值 先读入图像装入一个图像实体,然后该实体相当于一个多维list,可以直接用数组操作提取像素信 ...
- SQLite入门与分析(二)---设计与概念(续)
SQLite入门与分析(二)---设计与概念(续) 写在前面:本节讨论事务,事务是DBMS最核心的技术之一.在计算机科学史上,有三位科学家因在数据库领域的成就而获ACM图灵奖,而其中之一Jim G ...
- Python下opencv使用笔记(图像频域滤波与傅里叶变换)
Python下opencv使用笔记(图像频域滤波与傅里叶变换) 转载一只程序喵 最后发布于2018-04-06 19:07:26 阅读数 1654 收藏 展开 本文转载自 https://blog ...
- opencv笔记2:图像ROI
time:2015年 10月 03日 星期六 12:03:45 CST # opencv笔记2:图像ROI ROI ROI意思是Region Of Interests,感兴趣区域,是一个图中的一个子区 ...
- JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习
JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了 ...
- Elasticsearch笔记二之Curl工具基本操作
Elasticsearch笔记二之Curl工具基本操作 简介: Curl工具是一种可以在命令行访问url的工具,支持get和post请求方式.-X指定http请求的方法,-d指定要传输的数据. 创建索 ...
- Java_IO_文件的续写_小笔记
package IO; import java.io.FileWriter; import java.io.IOException; class FileWrite_WenJianXuXie { /* ...
- opencv入门系列教学(五)图像的基本操作(像素值、属性、ROI和边框)
0.序言 每个图像是由一个个点组成的,而这些点可以表示为像素值的形式. 这篇博客里我们将学会: 访问像素值并修改它们 . 访问图像属性 . 设置感兴趣区域(ROI) . 分割和合并图像. 对于图像的基 ...
- opencv笔记6:角点检测
time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...
随机推荐
- nsq 从搭建到应用(更新ing)windows
1.官网下载地址 我安装的是windows nsq-1.2.0.windows-amd64.go1.12.9.tar.gz https://nsq.io/deployment/installing.h ...
- 前台图片Canvas压缩上传小结
需求来源:之前有个提交审核表单的业务,表单中含有大量附件图片,大约有20多张吧,为了省事,采用的同步上传,一次需要上传很多照片,本来单张图片限制为200KB,这样子总图片大小约为5MB左右,想想也可以 ...
- DataRow转实体
调用 DataRow row = new DataRow(); ConvertToEntity<实体类>(row) private T Conv ...
- CSS属性之float浮动属性
float 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动.浮动元素会生成一个块级框,而不论它本身是何种元素. float有四个属性 ...
- (6)Mat对象的一些函数和方法的使用
首先是基本的代码整理 #include<iostream> #include<opencv.hpp> using namespace std; using namespace ...
- 在阿里云Centos7.6中部署nginx1.16+uwsgi2.0.18+Django2.0.4
上次在网上找了一个在阿里云Centos7.6中部署nginx1.16+uwsgi2.0.18+Django2.0.4的文档,可能是这个文档不是最新版的,安装的时候遇到了很多问题, 最后跟一个大神要了一 ...
- POJ 1013:Counterfeit Dollar
Counterfeit Dollar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42028 Accepted: 13 ...
- js正则 -180 到180 小数点后无限位
正则 -180 到180 小数点后无限位/^0$|^-?0\.\d*[1-9]$|^-?[1-9](\.\d*[1-9])?$|^-?[1-9]\d(\.\d*[1-9])?$|^-?1[0-7]\d ...
- [前端] VUE基础 (9) (element-ui、axios、Vuex)
一.element-ui的使用 官方网页:https://element.eleme.cn/#/zh-CN 1.安装element-ui (venv) D:\pycharm_workspace\vue ...
- hook鼠标
library dllMouse; uses SysUtils, Classes, UnitHookDLL in 'UnitHookDLL.pas', UnitHookConst in 'UnitHo ...