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笔记(二):图像的基本操作——续写的更多相关文章

  1. OpenCV学习笔记(3)——图像的基本操作

    获取图像的像素值并修改 获取图像的属性(信息) 图像的ROI() 图像通道的拆分及合并 1.获取并修改像素值 先读入图像装入一个图像实体,然后该实体相当于一个多维list,可以直接用数组操作提取像素信 ...

  2. SQLite入门与分析(二)---设计与概念(续)

    SQLite入门与分析(二)---设计与概念(续)   写在前面:本节讨论事务,事务是DBMS最核心的技术之一.在计算机科学史上,有三位科学家因在数据库领域的成就而获ACM图灵奖,而其中之一Jim G ...

  3. Python下opencv使用笔记(图像频域滤波与傅里叶变换)

    Python下opencv使用笔记(图像频域滤波与傅里叶变换) 转载一只程序喵 最后发布于2018-04-06 19:07:26 阅读数 1654  收藏 展开 本文转载自  https://blog ...

  4. opencv笔记2:图像ROI

    time:2015年 10月 03日 星期六 12:03:45 CST # opencv笔记2:图像ROI ROI ROI意思是Region Of Interests,感兴趣区域,是一个图中的一个子区 ...

  5. JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习

    JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了 ...

  6. Elasticsearch笔记二之Curl工具基本操作

    Elasticsearch笔记二之Curl工具基本操作 简介: Curl工具是一种可以在命令行访问url的工具,支持get和post请求方式.-X指定http请求的方法,-d指定要传输的数据. 创建索 ...

  7. Java_IO_文件的续写_小笔记

    package IO; import java.io.FileWriter; import java.io.IOException; class FileWrite_WenJianXuXie { /* ...

  8. opencv入门系列教学(五)图像的基本操作(像素值、属性、ROI和边框)

    0.序言 每个图像是由一个个点组成的,而这些点可以表示为像素值的形式. 这篇博客里我们将学会: 访问像素值并修改它们 . 访问图像属性 . 设置感兴趣区域(ROI) . 分割和合并图像. 对于图像的基 ...

  9. opencv笔记6:角点检测

    time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...

随机推荐

  1. 十五、CI框架之自动加载数据库

    一.在config的autoload.php文件中,如果写入以下代码,那么在控制器中无需再次加载数据库了,相当于全局自动加载数据库了 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码 ...

  2. GitHub Token for composer

    a2248520cdd2b1d27c2c70741003b9078530d81c

  3. 轻量级UILabel分段点击扩展更新啦

    http://www.code4app.com/thread-31445-1-1.html Tag: 项目介绍: YBAttributeTextTapAction 一行代码添加文本点击事件 效果图 S ...

  4. uboot 学习笔记

    ram 初始化: 在 start.S 中, bl cpu_init_crit 这句,在 tq2440 中是直接调用,在韦东山里面是通过和 TEXT_BASE 进行比较,如果从 RAM 中运行就不进行 ...

  5. Tensorflow学习教程------tensorboard网络运行和可视化

    tensorboard可以将训练过程中的一些参数可视化,比如我们最关注的loss值和accuracy值,简单来说就是把这些值的变化记录在日志里,然后将日志里的这些数据可视化. 首先运行训练代码 #co ...

  6. eclipse中tomcat添加或移除web项目出错,显示无资源能被添加或移除

    错误截图 之前一直都能正常使用,今天莫名其妙出现这个错误 解决办法 https://blog.csdn.net/u012956987/article/details/79134474 右击项目,在属性 ...

  7. php优惠券生成-去重

    记录一次优惠券生成-去重 方法一 /** * 生成批量礼品消费券 */ public function giftCardAddOp() { //接收get值 $num = $_GET['gift_nu ...

  8. A4纸表格打印

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 1-4 无监督学习(Unsupervised Learning)

    无监督学习定义: [无监督学习]中没有任何的标签或者是有相同的标签或者就是没标签.所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么.别的都不知道,就是一个数据集.你能从数据中找到某种结构吗 ...

  10. linux-权限管理相关

    inux权限管理—基本权限 目录 Linux权限管理—基本权限 一.权限的基本概述 二.权限修改命令chmod 三.基础权限设置案例 四.属主属组修改命令chown Linux权限管理—基本权限 一. ...