美文网首页
简单的OpenCV数字图像处理

简单的OpenCV数字图像处理

作者: 寻松点点 | 来源:发表于2020-03-13 22:43 被阅读0次

内容效果

  1. 绘制图像的直方图


    image.png
  2. 图像的旋转


    image.png
  3. 图像的轴对称翻转


    image.png

\color{#ea4335} {\Large\mathbf{图像直方图}}

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()函数实现。

image.png

所以这样来理解如下代码中的函数嵌套用法:
plt.hist(Image.ravel(),64 )

\color{#ea4335} {\Large\mathbf{图像的旋转}}

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:缩放大小

\color{#ea4335} {\Large\mathbf{图像的翻转}}

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()

相关文章

网友评论

      本文标题:简单的OpenCV数字图像处理

      本文链接:https://www.haomeiwen.com/subject/zrzyshtx.html