Python OpenCV像素操作
时间:2022-05-07
本文章向大家介绍Python OpenCV像素操作,主要内容包括Python OpenCV像素操作、读写像素、循环读取图像方法二:、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
Python OpenCV像素操作
环境声明 : Python3.6 + OpenCV3.3 + PyCharm IDE
首先要引入OpenCV和Numpy支持,添加代码如下:
import cv2 as cv;
import numpy as np;
读写像素
对RGB图像来说,在Python中第一个维度表示高度、第二个维度表示宽度、第三个维度是通道数目,可以通过下面的代码获取图像三个维度的大小
print(image.shape)
print(image.size)
print(image.dtype)
循环读取图像方法一:
直接从图像中读取,缺点是每次都需要访问imread之后的Mat对象,进行native操作,速度是个问题, 代码实现如下:
height = image.shape[0]
width = image.shape[1]
channels = image.shape[2]
print(image.shape)
for row in range(height):
for col in range(width):
for c in range(channels):
level = image[row, col, c]
pv = level + 30
image[row, col, c] = (255 if pv>255 else pv)
循环读取图像方法二:
首先通过Numpy把像素数据读到内存中,在内存中进行高效循环访问每个像素,修改之后,在赋值回去即可,代码如下:
# read once
pixel_data = np.array(image, dtype = np.uint8);
# loop pixel by pixel
for row in range(height):
for col in range(width):
for c in range(channels):
level = pixel_data[row, col, c]
pixel_data[row, col, c] = 255 - level
# write once
image[ : : ] = pixel_data
案例演示 在Python语言中完成图像的属性读取、像素读取与操作、实现了图像的颜色取反、亮度提升、灰度化、梯度化、操作。首先看一下效果:
完整的Python代码实现如下:
import cv2 as cv;
import numpy as np;
def inverse(image):
print("read and write pixel by pixel")
print(image.shape)
print(image.size)
print(image.dtype)
height = image.shape[0]
width = image.shape[1]
channels = image.shape[2]
# read once
pixel_data = np.array(image, dtype = np.uint8);
# loop pixel by pixel
for row in range(height):
for col in range(width):
for c in range(channels):
level = pixel_data[row, col, c]
pixel_data[row, col, c] = 255 - level
# write once
image[ : : ] = pixel_data
cv.imshow("inverse image", image)
def brightness(image):
print("read and write pixel by pixel")
height = image.shape[0]
width = image.shape[1]
channels = image.shape[2]
print(image.shape)
for row in range(height):
for col in range(width):
for c in range(channels):
level = image[row, col, c]
pv = level + 30
image[row, col, c] = (255 if pv>255 else pv)
cv.imshow("inverse image", image);
def to_gray(image):
print("RGB to Gray Image")
height = image.shape[0]
width = image.shape[1]
channels = image.shape[2]
print("channels : ", channels);
print(image.shape)
for row in range(height):
for col in range(width):
blue = image[row, col, 0]
green = image[row, col, 1];
red = image[row, col, 2]
gray = (0.2989*red + 0.5870*green + 0.1140*blue);
image[row, col, 0] = gray;
image[row, col, 1] = gray;
image[row, col, 2] = gray;
cv.imshow("gray image", image)
def gradient_image(image):
gx = cv.Sobel(image, cv.CV_32F, 1, 0)
gy = cv.Sobel(image, cv.CV_32F, 0, 1)
dst = cv.addWeighted(gx, 0.5, gy, 0.5, 50)
sobel_abs = np.absolute(dst)
sobel_8u = np.uint8(sobel_abs)
cv.imshow("gradient image", sobel_8u)
def clam(pv):
if pv > 255:
return 255
if pv < 0:
return 0;
return pv;
print("Image Pixel Operation Demo")
src = cv.imread("D:/vcprojects/images/demo.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
gradient_image(src)
cv.waitKey(0)
cv.destroyAllWindows()
- 基础篇章:React Native之 ScrollView 的讲解
- 常用 Git 命令清单
- 如何将配置spring文件指定名字,指定位置
- 基础篇章:React Native 之 TextInput 的讲解
- Linux下 标准错误输出重定向
- CentOs6.5 修改主机名
- 基础篇章:React Native 之 View 和 Text 的讲解
- CentOs7.3 修改主机名
- 基础篇章:React Native之Flexbox的讲解(Height and Width)
- PDF.js专题
- CentOs7.3 编译安装 Nginx 1.9.9
- 基础篇章:关于 React Native 之 RefreshControl 组件的讲解
- CentOs7.3 安装 JDK1.8
- 基础篇章:关于 React Native 之 ListView 组件的讲解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- codeforces 1203D2(贪心)
- HDOJ 2112(最短路)
- codeforces 1384A(构造)
- codeforces 982C (dfs)
- POJ 2493 (map)
- codeforces 1417C(思维)
- codeforces 1256C (贪心+构造)
- codeforces 722C(带权并查集+反向思维)
- codeforces 1144D(思维)
- 经典的SparkSQL/Hive-SQL/MySQL面试-练习题
- codeforces 1249E(dp)
- Redis-KV数据库Java连接以及Jedis包的使用
- codeforces 1203D1(暴力)
- codeforces 1366B(线段相交)
- 一文搞懂Python自动化测试框架