基于Python3.7.0版本安装opencv及简单的代码测试

 简单的opencv安装

  • 简述

      大家好!我是第一次写博客,可能会有很多步骤不明确的地方,欢迎大家指教,后期会有所改善。 其实安装好python3过后很好安装opencv,而且python3自带的pip.exe能够很快的导入一些安装模块语句。这篇文章是最基础的IDLE版的编译运行,在安装opencv的过程过程中可能遇到一些小问题,以下会有相应的讲解,安装成功后会在IDLE上运行测试一些关于计算机视觉方面的代码,例如:图像的显示、图像的直方图、图像的高斯滤波处理及直方图均衡化处理等等。

     1.先安装python3版本

           首先要在自己的电脑上安装一个python3的版本,不论是3.7.0还是其他版本,只要是python3的版本就可以运行一下的操作。如果没有安装python可以自己去百度上下载,百度上有很好的安装教程,讲解很明白。

  • 2.导入安装opencv

  1.       首先进入命令行窗口输入:pip.exe

     基于Python3.7.0版本安装opencv及简单的代码测试_第1张图片 

如果出现上面情况,说明python的pip.exe路径没找到;所以只要进入到正确的路径,就可以成功执行。

例如:我的python的pip.exe存放在:D:\Python37\Scripts

基于Python3.7.0版本安装opencv及简单的代码测试_第2张图片

则要把C盘转换到D盘,转换命令为:d:

最后再转换到pip.exe目录的相对路径的命令语句:cd  D:\Python37\Scriptsxianzai

基于Python3.7.0版本安装opencv及简单的代码测试_第3张图片

现在可以再输入一遍:pip.exe

基于Python3.7.0版本安装opencv及简单的代码测试_第4张图片

得到以上结果就说明当前的pip可以使用。这样就可以在命令行上输入导入opencv的语句:pip install opencv-python。要注意的是:如果直接输入:pip iastall opencv。会导入模块失败,这是因为在现在的python都是pyhton3的版本,自带的opencv名是opencv-python。

基于Python3.7.0版本安装opencv及简单的代码测试_第5张图片

因为我已经导入成功过,所以会显示已经下载成功。如果第一次导入,显示正在下载进度条说明正在下载,可能有些电脑会有下载久一点,只要最后显示成功下载:numpy opencv-python就说明下载安装成功。

  • 3.测试是否安装下载成功

      首先在自己电脑的搜索烂输入:IDLE,然后选择编译器点进去。

基于Python3.7.0版本安装opencv及简单的代码测试_第6张图片

基于Python3.7.0版本安装opencv及简单的代码测试_第7张图片

再点击File,创建一个new file,在创建的文件里写测试代码;

import cv2
import numpy
img=cv2.imread('test1.jpg',1)
#img
cv2.imshow("image",img)

如果没有报错且得出以下结果:说明安装成功!

基于Python3.7.0版本安装opencv及简单的代码测试_第8张图片

  • 简单的opencv代码例子

  1.   绘制图像、点和线(在运行编译的时候需要导入两个包,在命令行上输入命令语句为:pip install Pillow:导入关于PIL模块中的函数,PIL最重要的模块为Image.和pip install Matplotlib:有PyLab的接口)

   

from PIL import Image
from pylab import *

#读取图像到数组中
im=array(Image.open('test1.jpg'))
#绘制图像
imshow(im)
#定义一些点的位置
x=[100,100,400,400]
y=[100,250,100,350]
#使用红色的星状标记
plot(x,y,'r*')
#绘制连接前三个点
plot(x[:3],y[:3])
title('plotting:test1.jpg')
show()
#消除坐标轴
#axis('off')
  1. 基于Python3.7.0版本安装opencv及简单的代码测试_第9张图片

 

   2.绘制图像轮廓和直方图

(1)绘制图像的轮廓需要对每个坐标[x,y]的像素值施加同一个阈值,左右首先就要将图像灰度化。图像灰度化转换可以使用convert()函数实现,只需要在读取图片后面加上.convert('L')

(2)绘制直方图时,hist()函数只接受一维数组输入,所以在进行图像直方图之前要对图像进行压平处理。flatten()方法将任意数组按照行优先准则转换成一维数组。

from PIL import Image
from pylab import *
#读取图像到数组里
im=array(Image.open('test1.jpg').convert('L'))
figure()
#不使用颜色信息
gray()
contour(im,origin='image')
axis('equal')
axis('off')
figure()
#绘制直方图
hist(im.flatten(),128)#hist()函数的第二个参数为指定小区间的数目,可以适当根据自己的图片取值
show()

基于Python3.7.0版本安装opencv及简单的代码测试_第10张图片

 

*绘制图像高斯滤波图

  1. 彩色图片直方图

SciPy用scipy.ndimage import filters模块来做滤波,该模块使用快速一维分离方法计算卷积。

如何显示中文标题相关信息链接:https://zhidao.baidu.com/question/2144245729169338868.html

from PIL import Image
from numpy import *
from pylab import *
from scipy.ndimage import filters

#动态设置标题显示中文
mpl.rcParams['font.sans-serif'] = ['SimHei']
#读取图像到数
im=array(Image.open('test1.jpg'))
im2=zeros(im.shape)
for i in range(3):
  im2[:,:,i]=filters.gaussian_filter(im[:,:,i],2)
im3=uint8(im2)

for i in range(3):
  im2[:,:,i]=filters.gaussian_filter(im[:,:,i],5)
im4=uint8(im2)
figure()

subplot(1,3,1),imshow(im),title('原图')
axis('off')
subplot(1,3,2),imshow(im3),title('标准度为2的图像')
axis('off')
subplot(1,3,3),imshow(im4),title('标准度为5的图像')
axis('off')
show()

 

基于Python3.7.0版本安装opencv及简单的代码测试_第11张图片

  1.   绘制图像直方均衡

绘制直方图均衡化相关解释博客链接:https://blog.csdn.net/zhuoyuezai/article/details/79635557

https://blog.csdn.net/jacke121/article/details/79223144

from PIL import Image
from numpy import *
from pylab import *
import os
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif'] = ['SimHei']

def histep(im,nbr_bins=256):
    """对一幅灰度图像进行直方图均衡化"""
#计算图像直方图
    imhist,bins=histogram(im.flatten(),nbr_bins,normed=True)
    cdf=imhist.cumsum()#积累分布函数
    cdf=255*cdf/cdf[-1]#归一化
#积累分布函数的线性插值,计算新的像素
    im2=interp(im.flatten(),bins[:-1],cdf)
    return im2.reshape(im.shape),cdf
#im2是均衡化的像素图像

im=array(Image.open('test1.jpg').convert('L'))
im2,cdf=histep(im)#调用直方图均衡化函数,nbr_bins是函数内自定义数值,所以调用函数即使没有赋值也能自行调用

#im0=Image.fromarray(im)#未均衡化将array转换为图像
#im3=Image.fromarray(im2)#将均衡化array转换为图像
#im3.show()

figure()
subplot(2,2,1),imshow(im,plt.cm.gray),title('原图')
subplot(2,2,2),hist(im.flatten(),255),title('原图直方图')
subplot(2,2,3),imshow(im2,plt.cm.gray),title('均衡化图像')
subplot(2,2,4),hist(im2.flatten(),255),title('均衡化直方图')
show()

在编写代码的时候一定要记得,imshow()和hist()的区别,我就犯过很多次这样的错误。在imshow()过后就不要再hist(),这样重复写会出现图像数据无法转换为float的错误。因为imshow显示的是255~0之间的像素,而hist表示的是double类型的像素,会出现无法转换像素类型。

基于Python3.7.0版本安装opencv及简单的代码测试_第12张图片

从下的图可以看出均衡化直方图对比原图直方图,可以看出图像的对比度增强,原先的图像灰色区域的细节变得清晰了。由于我测试的图片像素之间差别不大,可以看到原直方图图像像素就比较接近均衡化结果,所以显示出来的图像灰度区间对比不是很强,但是从直方图也能看出有均衡化效果。

基于Python3.7.0版本安装opencv及简单的代码测试_第13张图片

 

#编译运行后会出现上面的警告,表示在非均匀分档上传递`normed = True`一直被打破,既不计算概率密度函数也不计算概率质量函数。结果只有在箱子是均匀的时才是正确的,当密度= True时,无论如何都会产生相同的结果错误。虽然有警告但是还可以输出结果,在后面的python3版本中这种均衡化函数histep()被删除,所有会出现版本之间的差异错误,之后会继续改善做相应的改对。如果不用python2版的均衡化函数,目前简单可以直接调用opencv里的直方图均衡化函数cv2.equalizeHist,但是用cv2.equalizeHist进行直方图均衡化处理,只能对单通道进行处理。

test1.jpg
基于Python3.7.0版本安装opencv及简单的代码测试_第14张图片

 

你可能感兴趣的:(计算机视觉)