内容效果
-
绘制图像的直方图
image.png
-
图像的旋转
image.png
-
图像的轴对称翻转
image.png
1.代码
# coding=utf-8
# 引入需要的Python库
import cv2
import matplotlib.pyplot as plt
# 读取图像数据
Image0 = cv2.imread('lena.png',-1)
# 设置图像大小
Image=cv2.resize(Image0,None,fx=1,fy=1)
width,height=Image.shape[:2]
## 绘制直方图
cv2.imshow('Original',Image)
plt.hist(Image.ravel(),64 )
plt.show()
cv2.waitKey()
2. 相关函数:plt.hist( );ravel()
plt.hist(x,BINS)函数用来绘制直方图。
x:数据源,必须是一维的。
BINS:灰度级的分组情况
但x位置是一维数据,在数字图像的存储用矩阵表达。所以存在一个将图像矩阵转化为一维数据的过程,这个过程通过ravel()函数实现。

所以这样来理解如下代码中的函数嵌套用法:
plt.hist(Image.ravel(),64 )
1.代码
# coding=utf-8
# 需要的Python库
import cv2
# 读取图像数据
Image0 = cv2.imread('lena.png',-1)
# 设置图像大小
Image=cv2.resize(Image0,None,fx=1,fy=1)
width,height=Image.shape[:2]
#设置旋转
angle= 75
M=cv2.getRotationMatrix2D((width/2,height/2),angle,0.7 )
RImage = cv2.warpAffine(Image,M,(width,height) )
cv2.imshow('Original',Image)
cv2.imshow('Rotation',RImage)
cv2.waitKey()
2. 相关函数:cv2.warpAffine();cv2.getRotationMatrix2D()
cv2.warpAffine(src,M,size)
src:图像
M:旋转矩阵
size:输出时图像的尺寸大小
cv2.getRotation2D(center,angle,scale )获取旋转矩阵M:
center:旋转中心
angle:旋转角度(正为逆时针;负为顺时针)
scale:缩放大小
1.代码
# coding=utf-8
# 需要的Python库
import cv2
# 读取图像数据
Image0 = cv2.imread('lena.png',-1)
# 设置图像大小
Image=cv2.resize(Image0,None,fx=1,fy=1)
width,height=Image.shape[:2]
xImage = cv2.flip(Image,0)
yImage = cv2.flip(Image,1)
xyImage = cv2.flip(Image,-1)
## 翻转
cv2.imshow('0',Image)
cv2.imshow('x',xImage)
cv2.imshow('y',yImage)
cv2.imshow('xy',xyImage)
cv2.imshow('0',Image)
cv2.imshow('x',xImage)
cv2.imshow('y',yImage)
cv2.imshow('xy',xyImage)
cv2.waitKey()
2. 相关函数:cv2.flip()
cv2.flip(src,flipcode )
src:图像数据
flipcode参数:
0:绕着x轴旋转(上下旋转)
正数(如123等任意正数):绕着y轴旋转(左右对称旋转)
负数(如-1-2-3等任意负数):绕x轴y轴同时旋转(x轴旋转和y轴旋转的组合)
Octave实现
pkg load image
# 图像直方图
I=imread('lena.png');
%{
subplot(1,2,1);
imshow(I);
subplot(1,2,2);
imhist(I,256);
%}
# 旋转
%{
B=imrotate(I,45);
subplot(1,2,1);
imshow(I);
subplot(1,2,2);
imshow(B)
%}
#翻转
Cy=fliplr(I);
Cx=flipud(I);
Cxy=fliplr(flipud(I));
subplot(2,2,1);
imshow(I);
subplot(2,2,2);
imshow(Cx)
subplot(2,2,3);
imshow(Cy)
subplot(2,2,4);
imshow(Cxy)
Python OpenCV 和Octave的对比
变换 | OpenCV | Matlab |
---|---|---|
直方图 | opencv; matplotlib;plt.hist();ravel() | imhist() |
旋转 | cv2.getRotationMatrix2D();cv2.warpAffine() | imrotate() |
翻转 | cv2.flip() | fliplr();flipud() |
网友评论