一、对图片各个像素点的像素值进行操作

image.shape[0]:image图像的height
image.shape[1]:image图像的width
image.shape[2]:image图像的channels

import cv2
import numpy as npdef access_pixels(image):print(image.shape)height = image.shape[0]width = image.shape[1]channels = image.shape[2]print("width:%s,height:%s,channels:%s"%(width,height,channels))for row in range(height):for col in range(width):for c in range(channels):pv = image[row,col,c]#获取原图的所有颜色通道的像素点的像素值image[row,col,c] = 255 - pvcv2.imshow("pixels ",image)src = cv2.imread("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")#BGR
cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image",src)t1 = cv2.getTickCount()
access_pixels(src)#为了得到该代码的运行时间,通常再这行代码上下放入一个Tick进行计时
t2 = cv2.getTickCount()time = (t2-t1)/cv2.getTickFrequency()#显示当前运行时间
print("time:%s ms"%(time*1000))#输出当前运行时间单位为ms
cv2.waitKey(0)cv2.destroyAllWindows()

运行结果为:

运行的时间为619ms时间有点长,这里也就是实现图像像素值的反转操作而已,这里可以调用bitwise_notAPI(这个函数是C++写的),来缩短运行时间
cv2.bitwise_not(image):255 - image所对应的像素值

import cv2
import numpy as npdef inverse(image):dst = cv2.bitwise_not(image)cv2.imshow("inverse_image",dst)src = cv2.imread("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")#BGR
cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image",src)
t1 = cv2.getTickCount()
inverse(src)
t2 = cv2.getTickCount()
time = (t2-t1)/cv2.getTickFrequency()#显示当前运行时间
print("time:%s ms"%(time*1000))#输出当前运行时间单位为ms
cv2.waitKey(0)cv2.destroyAllWindows()

运行效果如下:

二、创建图像

创建一个400×400的三颜色通道的图像,图像的B通道赋值为1,其他颜色通道赋值为0,即显示蓝色
np.zeros([400,400,3],np.uint8):创建一个400*400的3颜色通道的图像,全部赋值为0,且每个像素值单位为uint8

import cv2
import numpy as npdef create_image():img = np.zeros([400,400,3],np.uint8)img[:,:,0] = np.ones([400,400])*255cv2.imshow("new image",img)src = cv2.imread("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")#BGR
cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image",src)
t1 = cv2.getTickCount()
create_image()
t2 = cv2.getTickCount()
time = (t2-t1)/cv2.getTickFrequency()#显示当前运行时间
print("time:%s ms"%(time*1000))#输出当前运行时间单位为ms
cv2.waitKey(0)cv2.destroyAllWindows()

效果图如下:

三、对单通道图像进行操作

方法一:先对400×400大小的单通道图像全部初始化为0,然后再对400×400区域的像素1乘以127,最终转换为127像素的灰色图像。

np.zeros([400,400,3],np.uint8):创建一个400400的3颜色通道的图像,全部赋值为0,且每个像素值单位为uint8
np.ones([400,400])*127:对400
400的图像的元素再次基础上分别乘以127

import cv2
import numpy as npdef create_image():img = np.zeros([400,400,1],np.uint8)img[:,:,0] = np.ones([400,400])*127cv2.imshow("new image",img)src = cv2.imread("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")#BGR
cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image",src)
t1 = cv2.getTickCount()
create_image()
t2 = cv2.getTickCount()
time = (t2-t1)/cv2.getTickFrequency()#显示当前运行时间
print("time:%s ms"%(time*1000))#输出当前运行时间单位为ms
cv2.waitKey(0)cv2.destroyAllWindows()

运行效果如下:

方法二:直接对400×400像素大小的单通道图像全部初始化为1,再对图像乘以255,得到白色图像。

img = np.ones([400,400,1],np.uint8):创建一个400*400的单通道的图像,全部赋值为1,且每个像素值单位为uint8
img = img * 255:img图像所有的像素值均对应乘以255

import cv2
import numpy as npdef create_image():img = np.ones([400,400,1],np.uint8)img = img * 255cv2.imshow("new image",img)src = cv2.imread("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")#BGR
cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image",src)
t1 = cv2.getTickCount()
create_image()
t2 = cv2.getTickCount()
time = (t2-t1)/cv2.getTickFrequency()#显示当前运行时间
print("time:%s ms"%(time*1000))#输出当前运行时间单位为ms
cv2.waitKey(0)cv2.destroyAllWindows()

效果图如下:

四、对矩阵操作

np.ones([3,3],np.uint8):创建一个3 * 3的矩阵,全部赋值为1,且每个像素值单位为uint8
m1.fill(52):m1图像的所有像素点的像素值全部填充为52
m1.reshape([1,9]):将m1原本3 * 3的矩阵转换为1* 9的矩阵

import cv2
import numpy as npdef create_image():m1 = np.ones([3,3],np.uint8)m1.fill(52)print(m1)m2 = m1.reshape([1,9])print(m2)src = cv2.imread("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")#BGR
cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image",src)
t1 = cv2.getTickCount()
create_image()
t2 = cv2.getTickCount()
time = (t2-t1)/cv2.getTickFrequency()#显示当前运行时间
print("time:%s ms"%(time*1000))#输出当前运行时间单位为ms
cv2.waitKey(0)cv2.destroyAllWindows()

效果图如下:

三、Numpy数组操作相关推荐

  1. [转载] python+opencv图像处理:numpy数组操作

    参考链接: Python中的numpy.pv 图片以矩阵的形式存在电脑里,需要用到数组操作来完成对图像的处理 常用的有两个API: zeros和ones 1 np.ones(size) 可以创建任意维 ...

  2. python-OpenCV之numpy数组操作

    1.图片的表示与存储 图片以矩阵的形式存在电脑里,需要用到数组操作来完成对图像的处理. np.ones(size) #可以创建任意维度的数组,各个元素值均为1 2 3 np.zeros(size,dt ...

  3. python观察日志(part26)--numpy数组操作

    学习笔记,仅供参考,有错必究 数组操作 # 垂直方向和并数组 arr1 = np.array([[1, 2, 3], [0, 0, 1]]) arr2 = np.array([[4, 5, 6], [ ...

  4. Numpy 数组操作

    https://docs.scipy.org/doc/numpy/reference/routines.array-manipulation.html #基础的操作 方法 描述 copyto(dst, ...

  5. Python数据分析(7)-numpy数组操作

    本节主要介绍numpy中在数组上的一些常规操作,在数组级别上包括数组迭代,数组拼接.数组分割,在元素级别包括元素迭代.元素增加.元素删除等. 本节的内容比较重要,同时也比较基础,是养成良好的编程习惯的 ...

  6. python运算学习之Numpy ------ 数组操作:连接数组、拆分数组 、广播机制、结构化数组、文件贮存与读写、np.where、数组去重...

    数组的连接: 1 # 连接数组 2 A = np.zeros((3, 4)) 3 B = np.ones_like(A) 4 print(A, "\n-------分割符--------\n ...

  7. 贾志刚-OpenCV下的numpy数组操作

    修改图像中的一些数据,使图像发生一些变化 # @Software : Window10 + Python3.6 + PyCharmimport cv2 as cv import numpy as np ...

  8. python笔记3(numpy数组)

    记录python听课笔记 文章目录 记录python听课笔记 一,数组创建 1.创建NumPy数组 1.1一维数组和二维数组的创建和访问 1.2三维数组 1.3数组元素的数据类型 1.4arange( ...

  9. B10_NumPy数组操作、修改数组形状、翻转数组、修改数组维度、连接数组、分割数组、数组元素的添加与删除

    NumPy数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resha ...

最新文章

  1. CountDownLatch 的使用小例
  2. yum安装mysql驱动_centos7下使用yum安装mysql
  3. 023_html引用和术语定义标签
  4. 【开发工具】Spark Shell 的使用
  5. Html5音乐可视化之音乐的获取和播放
  6. Python Django 学习笔记
  7. HDU -2546饭卡(01背包+贪心)
  8. java之七 高级类设计
  9. windows 停止nginx
  10. leetcode184. 部门工资最高的员工(SQL) 连接+嵌套查询
  11. 计算机基础简介、编程语言、翻译器、数据储存
  12. 社交系统ThinkSNS可以运营什么?可以应用于什么场景?
  13. mysql 处理文件函数_mysql数据处理与函数
  14. DEBUG -- CLOSE BY CLIENT STACK TRACE问题的两种解决方案,整理自网络
  15. Enterprise Architect学习(1)
  16. golang 修改全局默认时区的方法
  17. qt中如何模拟按钮点击_qt模拟鼠标单击事件
  18. 【直观详解】线性代数的本质
  19. 快速了解sealed关键字
  20. Docker的文件系统

热门文章

  1. uniapp /deep/设置uni-app组件样式时 h5生效 小程序失效问题解决
  2. 用 CSS 实现元素垂直居中,有哪些好的方案?
  3. 为什么Vue不能观察到数组length的变化?
  4. CSS中的overflow属性
  5. web前端学习之ruby标记和rt/rp标记
  6. WAP自助建站 我编程之路的启蒙
  7. ASP.NET获取客户端、服务器端基础信息
  8. BZOJ4061/Gym100624F CERC2012 Farm and Factory 最短路、切比雪夫距离
  9. 理解总结篇—List、Set、Map
  10. js中 javascript:void(0) 用法详解