经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
【图像处理】使用OpenCV+Python进行图像处理教程(一)
来源:cnblogs  作者:雨吹桐  时间:2021/3/1 8:42:49  对本文有异议

       OpenCV是进行图像处理的工具,也是计算机视觉领域近十几年不断发展和完善的产物。面对这个已基本成熟的开源库知识体系,我们新生代有必要不断地总结、回顾,以新的视角快速融入计算机视觉的奥秘世界。

       从这篇随笔开始,让我们踏上重新回顾OpenCV进行图像处理的奇妙之旅。

1  图像处理基础

1.1  图像的读入、显示、保存

  1. #图像读入
  2. import cv2
  3. img1 = cv2.imread(r'E:/python_opencv/tupian.jpg',0)
  1. #图像显示
  2. cv2.imshow('tupian',img1)
  3. k = cv2.waitKey()
  1. #图像保存
  2. cv2.imwrite('tupian,jpg',img1)

 

1.2  图像的基本表示方法

分为二值图像、灰度图像、彩色图像 这三种表示方法。

二值图像:0和1表示像素点颜色,0为黑色,1为白色。

灰度图像:256个灰度级,用数值[0,255]表示,0为黑色,1为白色。

彩色图像:RGB色彩空间表示红、绿、蓝三种通道,数值均为[0,255]。但是在opencv中用BGR色彩空间表示。

不同的表示方法和色彩空间之间可以互相转换。

 

1.3  像素处理

像素是构成一幅图像的基本组成单位。

二值图像和灰度图像:img[0,2]表示第0行第2列的像素点。

彩色图像:opencv里img[0,2]表示第0行第2列上B、G、R三个通道的像素值,img[0,2,2]表示第0行第2列上第2个通道R的像素值。

注1:可以使用二层或三层循环嵌套,对某区域内像素值整体修改,如:

  1. for i in range(0,50): #i表示像素的行数
  2. for j in range(0,100): #j表示像素的行数
  3. for k in range(0,3): #k表示通道数
  4. img[i,j,k]=255 #该区域的像素值均修改为255

注2:使用Numpy库中的zeros()函数可以生成一个元素值都为0的数组,如:

  1. import numpy as np
  2. img = np.zeros((3,5,3),dtpye=np.uint8)

 

1.4  使用numpy访问像素

numpy模块中提供了item()访问像素值,itemset()修改像素值

item(i,j)或item(i,j,k)    

itemset((i,j),a) 或 itemset((i,j,k),a)   i,j为行和列,k为彩色图片中的通道,a为新值。如:

  1. print('img.item(3,2,2)=',img.item(3,2,2)) #读取原像素值
  2. img.itemset((3,2,2),255) #将第3行第2列R通道的像素值修改为255

 

1.5  感兴趣区域(Region of Interset, ROI)

如果需要使用一张图片的某区域,可以将其定为感兴趣区域(ROI),然后就能对其整体进行操作。

  1. A = img1[10:30,50:100] #将img1的第10-30行像素、50-100列像素设定为ROI区域
  2. img2[20:40,300:350] = A #将该ROI区域赋给img2的第20-40行像素、300-350列像素

 

1.6  通道操作

对通道进行操作分为通道拆分和通道合并。

(一)通道拆分:

将BGR图像中的三个通道分别拆分出来。分为索引拆分方法和函数拆分方法。

索引拆分:

  1. #拆分为B、G、R三个通道
  2. B = img[:,:,0]
  3. G = img[:,:,1]
  4. R = img[:,:,2]

函数拆分:

  1. B,G,R = cv2.split(img)

(二)通道合并:

使用cv2.merge()函数将三个通道的灰度图像构成一幅彩色图像。

  1. bgr = cv2.merge([b,g,r])

 

1.7  获取图像属性

获取图像常用的属性,如大小、类型等。

shape 返回图像行数、列数、通道数

size 返回图像像素数

dtype 返回图像的数据类型

  1. print('img.shape=',img.shape) #shape 返回图像行数、列数、通道数
  2. print('img.size=',img.size) #size 返回图像像素数
  3. print('img.dtype=',img.dtype) #dtype 返回图像的数据类型

 

这次内容就分享到这里了,下次继续更新第2章图像的运算,希望与各位老师和小伙伴们交流学习~

 

原文链接:http://www.cnblogs.com/wanghaining/p/opencv-python-1.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号