您好,欢迎访问一九零五行业门户网

python图像处理的基础和OpenCV的入门函数

本篇文章给大家带来的内容是关于python图像处理的基础和opencv的入门函数,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
一.图像基础知识图像都是由像素(pixel)构成的,即图像中的小方格,这些小方格都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色和位置就决定该图像所呈现出来的样子。像素是图像中的最小单位,每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。
图像通常包括二值图像、灰度图像和彩色图像。
1.二值图像
二值图像中任何一个点非黑即白,要么为白色(像素为255),要么为黑色(像素为0)。将灰度图像转换为二值图像的过程,常通过依次遍历判断实现,如果像素>=127则设置为255,否则设置为0。
2.灰度图像
灰度图像除了黑和白,还有灰色,它把灰度划分为256个不同的颜色,图像看着也更为清晰。将彩色图像转换为灰度图是图像处理的最基本预处理操作,通常包括下面几种方法:
(1) 浮点算法:gray=r*0.3+g*0.59+b*0.11
(2) 整数方法:gray=(r*30+g*59+b*11)/100
(3) 移位方法:gray=(r*28+g*151+b*77)>>8;
(4) 平均值法:gray=(r+g+b)/3;(此程序采用算法)
(5) 仅取绿色:gray=g;
(6) 加权平均值算法:根据光的亮度特性,公式:  r=g=b=r*0.299+g*0.587+b0.144
通过上述任一种方法求得gray后,将原来的rgb(r,g,b)中的r,g,b统一用gray替换,形成新的颜色rgb(gray,gray,gray),用它替换原来的rgb(r,g,b)就是灰度图了。改变象素矩阵的rgb值,来达到彩色图转变为灰度图。
3.彩色图像
彩色图像是rgb图像,rgb表示红、绿、蓝三原色,计算机里所有颜色都是三原色不同比例组成的,即三色通道。
二.opencv读写图像本文主要使用python2.7和opencv进行讲解,首先调用”pip install opencv-python”安装opencv库,如下图所示:
1.读入图像
opencv读图像主要调用下面函数实现:
img = cv2.imread(文件名,[,参数])
 参数(1) cv2.imread_unchanged  (图像不可变)
 参数(2) cv2.imread_grayscale (灰度图像)
 参数(3) cv2.imread_color (读入彩色图像)
 参数(4) cv2.color_bgr2rgb (图像通道bgr转成rgb)
2.显示图像
显示图像调用函数如下:
cv2.imshow(窗口名, 图像名)
3.窗口等待
调用函数如下:
cv2.waitkey(delay)
 键盘绑定函数,共一个参数,表示等待毫秒数,将等待特定的几毫秒,看键盘是否有输入,返回值为ascii值。如果其参数为0,则表示无限期的等待键盘输入;参数>0表示等待delay毫秒;参数<0表示等待键盘单击。
4.删除所有窗口
调用函数如下:
cv2.destroyallwindows() 删除所有窗口
 cv2.destroywindows() 删除指定的窗口
5.写入图片
调用函数如下:
retval = cv2.imwrite(文件地址, 文件名)
下面代码是读入图片并显示保存。
# -*- coding:utf-8 -*-import cv2#读取图片img = cv2.imread("test.jpg")#显示图像cv2.imshow("demo", img)#等待显示cv2.waitkey(0)cv2.destroyallwindows()#写入图像cv2.imwrite("testyxz.jpg", img)
输出结果如下图所示,并且在文件夹下保存了一张名为“testyxz.jpg”的图像。
如果代码中没有watikey(0)函数,则运行结果如下图所示:
同时
可以对代码进行升级,如下所示:
#无限期等待输入k=cv2.waitkey(0)#如果输入esc退出if k==27: cv2.destroyallwindows()
三.opencv像素处理1.读取像素
灰度图像直接返回灰度值,彩色图像则返回b、g、r三个分量。注意opencv读取图像是bgr存储显示,需要转换为rgb再进行图像处理。
灰度图像:返回值 = 图像(位置参数)
eg: test=img[88,42]
彩色图像:返回值 = 图像[位置元素, 0 | 1 | 2 ] 获取bgr三个通道像素
eg: blue=img[88,142,0] green=img[88,142,1] red=img[88,142,2]
2.修改图像
修改图像如果是灰度图像则直接赋值新像素即可,彩色图像依次给三个值赋值即可。
灰度图像:
img[88,142] = 255
彩色图像:
img[88,142, 0] = 255
img[88,142, 1] = 255
img[88,142, 2] = 255
彩色图像:方法二
img[88,142] = [255, 255, 255]
下面代码是获取像素及修改的操作。
# -*- coding:utf-8 -*-import cv2#读取图片img = cv2.imread("test.jpg", cv2.imread_unchanged)test = img[88,142]print testimg[88,142] = [255, 255, 255]print test#分别获取bgr通道像素blue = img[88,142,0]print bluegreen = img[88,142,1]print greenred = img[88,142,2]print red#显示图像cv2.imshow("demo", img)#等待显示cv2.waitkey(0)cv2.destroyallwindows()#写入图像cv2.imwrite("testyxz.jpg", img)
输出结果如下所示:
[158 107 64]
[255 255 255]
255
255
255
下面代码是将行为100到200、列150到250的像素区域设置为白色。
# -*- coding:utf-8 -*-import cv2#读取图片img = cv2.imread("test.jpg", cv2.imread_unchanged)#该区域设置为白色img[100:200, 150:250] = [255,255,255]#显示图像cv2.imshow("demo", img)#等待显示cv2.waitkey(0)cv2.destroyallwindows()#写入图像cv2.imwrite("testyxz.jpg", img)
运行结果如下图所示:
相关推荐:
python编程中使用pillow来处理图像的基础教程
python零基础入门之八lambda的表达式和filter、map内置函数
python基于opencv的图像压缩算法实例分析
以上就是python图像处理的基础和opencv的入门函数的详细内容。
其它类似信息

推荐信息