Python-OpenCV(6)

接着上篇,这次写两个主题:

  1. OpenCV中的颜色空间转换
  2. OpenCV中的几何变换

OpenCV中的颜色空间转换

颜色空间有许多种,常用有RGB,CMY,HSV,HSI等. 我们平时说的三通道的图就是指的是RGB的图.

贴一段百度百科的介绍:

RGB(红绿蓝)是依据人眼识别的颜色定义出的空间,可表示大部分颜色。但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将色调,亮度,饱和度三个量放在一起表示,很难分开。它是最通用的面向硬件的彩色模型。该模型用于彩色监视器和一大类彩色视频摄像

CMY是工业印刷采用的颜色空间。它与RGB对应。简单的类比RGB来源于是物体发光,而CMY是依据反射光得到的。具体应用如打印机:一般采用四色墨盒,即CMY加黑色墨盒

HSV,HSI两个颜色空间都是为了更好的数字化处理颜色而提出来的。有许多种HSX颜色空间,其中的X可能是V,也可能是I,依据具体使用而X含义不同。H是色调,S是饱和度,I是强度

对于图像处理上,常见的颜色空间转换就是两种:

  1. RGB—>Gray
  2. RGB—>HSV

转换API:

cv2.cvtColor(input_image,flag),falg是转换类型

代码:

__author__ = ‘gavinzhou‘
# -*- coding: utf-8 -*-

import cv2

# read the original images
im = cv2.imread("./images/1.png")
if len(im.shape) == 3:
    print "original image is an RGB image"
else:
    print "original image is an gray image"

# convert to gray
if len(im.shape) == 3:
    im_gray = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)

# convert to HSV

if len(im.shape) == 3:
    im_hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)

# show the images
cv2.imshow("ori", im)
cv2.imshow("gray", im_gray)
cv2.imshow("hsv", im_hsv)

cv2.waitKey(8000)
cv2.destroyAllWindows()

结果:

这个图的右下角是我的桌面哈,不是显示的图

OpenCV中的几何变换

这个部分的化就比较难了,如果大家只是想实现类似于图像翻转之类的,大家可以不用看这个,直接使用PIL,里面有简单的实现,直接调用就行了,不需要看这个

如果你还想实现点更强大点的功能,那就有必要看看接下来的了

空间变换对应矩阵的仿射变换。一个坐标通过函数变换的新的坐标位置:

就是原始的点坐标(x,y),经过转换以后,新的坐标是(x‘,y‘)

所以,实质上几何变换就是点的变换,对应到矩阵就是仿射变换

举个例子:

把图像向右移动两个像素,其实就是将原始的像素的位置,比如(x,y),变为(x+2,y+2),这样就是图像整体向右移动了两个像素

下面,以2x2的矩阵来说明问题

平移变换

对原始的坐标来说,(x,y)变换为(x‘,y‘),所以变换矩阵及逆矩阵:

缩放变换

将图像横坐标放大(或缩小)sx倍,纵坐标放大(或缩小)sy倍,变换矩阵及逆矩阵:

旋转变换

图像绕原点逆时针旋转a角,其变换矩阵及逆矩阵(顺时针选择)为:

代码:

__author__ = ‘gavinzhou‘
# -*- coding: utf-8 -*-

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

# read the original images
img = cv2.imread("./images/1.png")

rows, cols, channels = img.shape
res = cv2.resize(img, (cols/2, rows/2))

#Translation:

# 1.shift
M_shift = np.float32([[1, 0, 100], [0, 1, 50]])
img_shift = cv2.warpAffine(img, M_shift, (cols, rows))

# 2.rotate
M_rotate = cv2.getRotationMatrix2D((cols/2, rows/2), 90, 1)
img_rotate = cv2.warpAffine(img, M_rotate, (cols, rows))

# 3.affine
pts1 = np.float32([[50, 50], [200, 50], [50, 200]])
pts2 = np.float32([[10, 100], [200, 50], [100, 250]])
M_affine = cv2.getAffineTransform(pts1,pts2)
img_affine = cv2.warpAffine(img, M_affine, (cols, rows))

# 4.perspective
pts3 = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
pts4 = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])
M_perspective = cv2.getPerspectiveTransform(pts3, pts4)
img_perspective = cv2.warpPerspective(img, M_perspective, (cols, rows))

print ‘shift:\n‘, M_shift
print ‘rotate:\n‘, M_rotate
print ‘affine:\n‘, M_affine
print ‘perspective:\n‘, M_perspective

plt.subplot(231), plt.imshow(img), plt.title(‘src‘)
plt.subplot(232), plt.imshow(res), plt.title(‘scale‘)
plt.subplot(233), plt.imshow(img_shift), plt.title(‘shift‘)
plt.subplot(234), plt.imshow(img_rotate), plt.title(‘rotate‘)
plt.subplot(235), plt.imshow(img_affine), plt.title(‘affine‘)
plt.subplot(236), plt.imshow(img_perspective), plt.title(‘perspective‘)

plt.show()

结果:

console打印结果:

shift:
[[   1.    0.  100.]
 [   0.    1.   50.]]
rotate:
[[  6.12323400e-17   1.00000000e+00   7.70000000e+01]
 [ -1.00000000e+00   6.12323400e-17   4.73000000e+02]]
affine:
[[  1.26666667   0.6        -83.33333333]
 [ -0.33333333   1.          66.66666667]]
perspective:
[[  1.05587376e+00   9.18151097e-02  -6.50969128e+01]
 [  4.69010049e-02   1.12562412e+00  -7.57920240e+01]
 [  1.83251448e-04   5.13337001e-04   1.00000000e+00]]
时间: 2024-10-05 07:41:00

Python-OpenCV(6)的相关文章

RPi 2B python opencv camera demo example

/************************************************************************************** * RPi 2B python opencv camera demo example * 声明: * 本文主要记录RPi 2B 使用python opencv来获取图片的方式. * * 2016-2-24 深圳 南山平山村 曾剑锋 **********************************************

python opencv 人脸识别初识

甲.希望通过python加opencv搭建自己的人脸识别判断库 参照如下网页,配置python opencv开发环境, {博主ma6174} http://www.cnblogs.com/ma6174/archive/2013/03/31/2991315.html ubuntu中已有python-opencv的库,安装方便 sudo apt-get install libopencv-* sudo apt-get install python-opencv sudo apt-get instal

.NET + OpenCV & Python + OpenCV 配置

最近需要做一个图像识别的GUI应用,权衡了Opencv+ 1)QT,2)Python GUI,3).NET后选择了.NET... 本文给出C#+Opencv和Python+Opencv的相应参考,节省大家时间. (一)C#.NET + Opencv 1)下载并安装Emgu库(for opencv on .NET env) Download @ http://sourceforge.net/projects/emgucv/ 2)How to use opencv on C#? VS上配置Emgu(

python+opencv实现高斯平滑滤波

功能: 创建两个滑动条来分别控制高斯核的size和σ的大小,这个程序是在阈值分割的那个程序上改动的.阈值分割程序在这 注意:由于σ=0时,opencv会根据窗口大小计算出σ,所以,从0滑动σ的滑动条时,会出现先边清晰又变模糊的现象 python+opencv实现阈值分割 python+opencv实现霍夫变换检测直线 (2016-5-10)到OpenCV-Python Tutorials's documentation!可以下载 代码: # -*- coding: utf-8 -*- impor

python+opencv实现阈值分割

最近老师留了几个作业,虽然用opencv很简单一句话就出来了,但是还没用python写过.在官方文档中的tutorial中的threshold里,看到可以创建两个滑动条来选择type和value,决定用python实现一下 注意python中的全局变量,用global声明 开始出现了一些问题,因为毁掉函数每次只能传回一个值,所以每次只能更新value,后来就弄了两个毁掉函数,这个时候,又出现了滑动其中一个,另一个的值就会变为默认值的情况,这个时候猜想是全局变量的问题,根据猜想改动之后果然是. 感

python+opencv实现霍夫变换检测直线

python+opencv实现高斯平滑滤波 python+opencv实现阈值分割 (2016-5-10)到OpenCV-Python Tutorials's documentation可以下载 功能: 创建一个滑动条来控制检测直线的长度阈值,即大于该阈值的检测出来,小于该阈值的忽略 注意:这里用的函数是HoughLinesP而不是HoughLines,因为HoughLinesP直接给出了直线的断点,在画出线段的时候可以偷懒 代码: # -*- coding: utf-8 -*- import

AI新时代-大神教你使用python+Opencv完成人脸解锁(附源码)

好吧,伙计们,我回来了.说我拖更不写文章的可以过来用你的小拳拳狠命地捶我胸口.... 那么今天我们来讲关于使用python+opencv+face++来实现人脸验证及人脸解锁.代码量同样不多,你可以将这些代码运用在其它一些智能领域,如智能家居,进门的时候判断你是谁,也可以加入机器学习判断来的人是客人还是熟人.在讲之前我们会先适当的拓扑一下关于人脸识别的知识点.OK废话少说下面开始正是话题. 解锁原理: 原理呢,其实很简单,没有那么复杂难懂(当然除了官方语言之外).我们先来通俗的说一下利用Face

Python+OpenCV图像处理(一)——读取显示一张图片

配置好所有环境后,开始利用python+opencv进行图像处理第一步. 读取和显示一张图片: import cv2 as cv src=cv.imread('E:\imageload\example.png') cv.namedWindow('input_image', cv.WINDOW_AUTOSIZE) cv.imshow('input_image', src) cv.waitKey(0) cv.destroyAllWindows() 输出效果: 代码解释: src=cv.imread(

Python+opencv+pyaudio实现带声音屏幕录制

原文链接:https://blog.csdn.net/zhaoyun_zzz/article/details/84341801 Python+opencv+pyaudio实现带声音屏幕录制原创luke-skyworker 发布于2018-11-28 23:05:23 阅读数 3463 收藏展开文章目录声音录制视频录制(无声音)录制的音频与视频合成为带声音的视频 基于个人的爱好和现实的需求,决定用Python做一个屏幕录制的脚本.因为要看一些加密的视频,每次都要登录,特别麻烦,遂决定用自己写的脚本

python+opencv实现机器视觉基础技术(边缘提取,图像滤波,边缘检测算子,投影,车牌字符分割)

目录 一:边缘提取 1.对图像进行阈值分割并反色 2.边缘提取 二:图像滤波 1.读取原图 2.均值滤波 3.中值滤波 4.高斯滤波 5.高斯边缘检测 三:边缘检测算子 1.显示原图 2.对图像进行反色 3.对图像用sobel方法进行边缘检测 4.对图像用robert方法进行边缘检测 四:投影 1.显示原图 2.垂直方向投影 3.水平方向投影 五:车牌字符分割 1.读取原图 2.灰度转换 3.反色 4.阈值分割 5.投影 6.字符识别匹配分割 ??机器视觉是人工智能正在快速发展的一个分支.简单说