Python+OpenCV图片局部区域像素值处理详解


Posted in Python onJanuary 23, 2019

背景故事:我需要对一张图片做一些处理,是在图像像素级别上的数值处理,以此来反映图片中特定区域的图像特征,网上查了很多,大多关于opencv的应用教程帖子基本是停留在打开图片,提取像素重新写入图片啊之类的基本操作,我是要取图片中的特定区域再提取它的像素值,作为一个初学者开始接触opencv简直一脸懵,慢慢摸索着知道了opencv的一些函数是可以实现的像SetImageROI()函数设置ROI区域,即感兴趣区域,就很好用啊,总之最后是实现了自己想要的功能。现在看个程序确实是有点挫,也有好多多余的没必要的代码,但毕竟算一次码代码的历程,就原模原样贴在这里吧。

代码功能:在python下用opencv

  • 打开图片并显示并重新写入新的文件
  • 提取图片特定区域的像素值(根据自己需求,下面在代码中注解)
  • 对提取出来的像素值做处理用matplotlib显示成条形图

源码贴在下面:

# -*- coding:utf-8 -*-
__author__ = 'lwp'
import cv2.cv as cv
import numpy as np
import matplotlib.pyplot as plt

# 文件路径
path = '/media/lwp/A/4.bmp'
# 载入一张图片,参数cv.CV_LOAD_IMAGE_GRAYSCALE为打开为灰度图
lwpImg = cv.LoadImage(path, cv.CV_LOAD_IMAGE_GRAYSCALE)
# 创建图像空间,参数为size, depth, channels,这里设置的是图片等高宽30个像素的一个区域,8位,灰度图
box_lwpImg = cv.CreateImage((30, 576), 8, 1)

# 创建窗口
cv.NamedWindow('test1', cv.CV_WINDOW_AUTOSIZE)
cv.NamedWindow("box_test1", cv.CV_WINDOW_AUTOSIZE)

# 设置ROI区域,即感兴趣区域,参数为x, y, width, heigh
cv.SetImageROI(lwpImg, (390, 0, 30, 576)) 
# 提取ROI,从lwpImg图片的感兴趣区域到box_lwpImg
cv.Copy(lwpImg, box_lwpImg)

# 对box区域进行循环提取像素值存到列表pixel_list中
pixel_list = []
for i in range(576): # 576为box的高
  for j in range(30): # 30为box的宽
    x = box_lwpImg[i, j]
    pixel_list.append(x)

# 提取的像素值转为int整型赋给一维数组pixel_list_np_1
pixel_list_np_1 = np.array(pixel_list, dtype=int)
# 转为576*30的二位数组,即按图片box排列
pixel_list_np_2 = np.array(pixel_list_np_1).reshape(576, 30)
# 行求和,得到576个值,即每行的像素信息
pixel_sum = np.sum(pixel_list_np_2, axis=1)

# 取消设置
cv.ResetImageROI(lwpImg)

# 画目标区域
lwpImg = cv.Rectangle(lwpImg, (390, 0), (425, 576), (0, 255, 0), 2)
# 显示图像
cv.ShowImage('test1', lwpImg)
# 查看列表list长度,以确定像素值提取准确
list_length = len(pixel_list)
print list_length

# 查看数组维度,shape验证
print pixel_list_np_1.ndim
print pixel_list_np_1.shape
print pixel_list_np_1

print pixel_list_np_2.ndim
print pixel_list_np_2.shape
print pixel_list_np_2

print pixel_sum

# 画条形图
plt.figure(1)
width = 1
for i in range(len(pixel_sum)):
  plt.figure(1)
  plt.bar(i, pixel_sum[i], width)
plt.xlabel("X")
plt.ylabel("pixel_sum")
plt.show()

# 按ESC退出,按s保存图片
k = cv.WaitKey(0)
if k == 27:         # wait for ESC key to exit
  cv.DestroyAllWindows()
elif k == ord('s'):     # wait for 's' key to save and exit
  cv.WriteFrame('copy_test.png', lwpImg)
  cv.DestroyAllWindows()

补充:这个代码虽然实现了我需要的功能,之后在对视频流做同样像素值提取处理并绘图的时候,意识到图片本就是数组形式,对于8位灰度图,通道数为1,它就是个二位数组,这样就没有必要再设置ROI区域,复制出来这块区域再循环提取像素存入数组进行处理了,可以直接将图片存入数组,再利用numpy进行相应的数组操作就可以了,这样一想就简单很多了,下篇会写对数据流的处理,直接读取视频文件或直接从内存取摄像头的视频流进行处理,未完待续。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
2款Python内存检测工具介绍和使用方法
Jun 01 Python
Python中使用item()方法遍历字典的例子
Aug 26 Python
Python使用gensim计算文档相似性
Apr 10 Python
python 字典(dict)按键和值排序
Jun 28 Python
利用Python为iOS10生成图标和截屏
Sep 24 Python
Python基于opencv的图像压缩算法实例分析
May 03 Python
从0开始的Python学习016异常
Apr 08 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 Python
Python中文纠错的简单实现
Jul 07 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 #Python
Appium Python自动化测试之环境搭建的步骤
Jan 23 #Python
python读取图片任意范围区域
Jan 23 #Python
Python基于plotly模块实现的画图操作示例
Jan 23 #Python
python实现剪切功能
Jan 23 #Python
对python实现合并两个排序链表的方法详解
Jan 23 #Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
Jan 23 #Python
You might like
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
2014/10/23 Python
在Python中使用列表生成式的教程
2015/04/27 Python
使用Python编写简单的画图板程序的示例教程
2015/12/08 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
对python调用RPC接口的实例详解
2019/01/03 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
测绘工程个人的自我评价
2013/11/23 职场文书
养殖项目策划书范文
2014/01/13 职场文书
精通CAD能手自荐书
2014/01/31 职场文书
《美丽的田园》教学反思
2014/03/01 职场文书
地球一小时倡议书
2014/04/15 职场文书
高中课程设置方案
2014/05/28 职场文书
批评与自我批评总结
2014/10/17 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android