cv2和numpy深度契合,其图片读入后就是numpy.array,只不过dtype比较不常用而已,支持全部数组方法

数组既图片

import numpy as np
import cv2
img = np.zeros((3, 3), dtype=np.uint8) # numpy数组使用np.uint8编码就是cv2图片格式
print(img, '\n', img.shape, '\n')
img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) # 单通道转化BGR格式3通道
print(img, '\n', img.shape)

[[0 0 0]
 [0 0 0]
 [0 0 0]]
 (3, 3)

[[[0 0 0]
  [0 0 0]
  [0 0 0]]

[[0 0 0]
  [0 0 0]
  [0 0 0]]

[[0 0 0]
  [0 0 0]
  [0 0 0]]]
 (3, 3, 3)

读写图片文件

image = cv2.imread('img1.jpg')   # 读文件
cv2.imwrite('img1.png', image) # 写文件
print(image.shape)

(2716, 1920, 3)

灰度模式读取

grayImage = cv2.imread('img2.jpg', cv2.IMREAD_GRAYSCALE)  # 读取为灰度模式
cv2.imwrite('img2_gray.png', grayImage)

True

数组or图片属性查询

img = cv2.imread('img1.jpg')  # 图片属性查询
print(img[0, 0])
print(img.shape)
print(img.size)
print(img.dtype)

[18 18 18]
(2716, 1920, 3)
15644160
uint8

其他演示

cv2.cvtColor(img,cv2.COLOR_BAYER_BG2BGR)

img.item(0,0)

img.itemset((0,0),0)

cv2.imshow('my image',img)

cv2.waitKey()

cv2.destroyAllWindows()

 # coding=utf-8
import cv2
import numpy as np # array数组生成
img = np.zeros((3,3),dtype=np.uint8)
print img.shape # array数组转化为BGR模式
# 我也不懂为什么不用RGB而用BGR这么蹩脚的用法
img = cv2.cvtColor(img,cv2.COLOR_BAYER_BG2BGR)
print img.shape # 读取图片,左上像素点改写为蓝色,保存
img = cv2.imread('beauti.jpeg')
img[0][0] = [255,0,0]
cv2.imwrite('MyPic.png',img) # 丢失颜色信息,左上像素点改写为黑色,保存
img = cv2.imread('beauti.jpeg',cv2.IMREAD_GRAYSCALE)
print img.shape
img[0][0] = 0
cv2.imwrite('MyPic-gray.png',img) # 使用array.item和array.itemset优雅的重写上面代码
img = cv2.imread('beauti.jpeg',cv2.IMREAD_GRAYSCALE)
print img.shape
#img[0][0] = 0
print img.item(0,0)
img.itemset((0,0),0)
cv2.imwrite('MyPic-gray.png',img) # 去掉绿色通道
img = cv2.imread('beauti.jpeg')
img[:,:,1] = 0
cv2.imwrite('no_green.png',img)
print img.shape,img.size,img.dtype img = cv2.imread('beauti.jpeg')
# 显示图片,必须输入两个参数
cv2.imshow('my image',img)
# 窗口展示时间
cv2.waitKey()
# 释放窗口
cv2.destroyAllWindows()

『OpenCV3』简单图片处理的更多相关文章

  1. 『OpenCV3』基于色彩分割图片

    一.遍历图像实现色彩掩码 本节我们实现这样一个算法,我们指定某种颜色和一个阈值,根据输入图片生成一张掩码,标记符合的像素(和指定颜色的差异在阈值容忍内). 源代码如下,我们使用一个class完成这个目 ...

  2. 『OpenCV3』Harris角点特征_API调用及python手动实现

    一.OpenCV接口调用示意 介绍了OpenCV3中提取图像角点特征的函数: # coding=utf- import cv2 import numpy as np '''Harris算法角点特征提取 ...

  3. 『OpenCV3』霍夫变换原理及实现

    霍夫变换常用于检测直线特征,经扩展后的霍夫变换也可以检测其他简单的图像结构. 在霍夫变换中我们常用公式 ρ = x*cosθ + y*sinθ 表示直线,其中ρ是圆的半径(也可以理解为原点到直线的距离 ...

  4. 『OpenCV3』Mat简介

    Mat属性方法介绍:OpenCV2:Mat属性type,depth,step 推荐一套OpenCV入门博客:OpenCV探索 一.Mat Mat类用于表示一个多维的单通道或者多通道的稠密数组.能够用来 ...

  5. 『OpenCV3』处理视频&摄像头

    在opencv中,摄像头和视频文件并没有很大不同,都是一个可以read的数据源,使用cv2.VideoCapture(path).read()可以获取(flag,当前帧),对于每一帧,使用图片处理函数 ...

  6. 『TensorFlow』pad图片

    tf.pad()文档如下, pad(tensor, paddings, mode='CONSTANT', name=None, constant_values=0)    Pads a tensor. ...

  7. 『OpenCV3』滤波器边缘检测

    一.原理简介 边缘检测原理 - Sobel, Laplace, Canny算子 X方向Sobel算子 -1 -2 -1 0 0 0 1 2 1 Y方向Sobel算子 -1 0 1 -2 0 2 -1 ...

  8. 『OpenCV3』滤波器实现及使用滤波器降噪

    一.滤波器实现 我们实现这样一个基于拉普拉斯算子的滤波器核心,并使用它进行滤波,这可以做到锐化图像的效果, 0 -1 0 -1 5 -1 0 -1 0 首先我们完全手动的进行滤波,依赖指针操作, vo ...

  9. 『TensorFlow』专题汇总

    TensorFlow:官方文档 TensorFlow:项目地址 本篇列出文章对于全零新手不太合适,可以尝试TensorFlow入门系列博客,搭配其他资料进行学习. Keras使用tf.Session训 ...

随机推荐

  1. 笔试题二(java面向对象、多线程、集合)

    1.final关键字的特点 final修饰变量时,在堆内存中的地址是不变的,但对象的内容是可变的.//思考,找例子 2.静态变量的特点 实例变量是用对象引用,要先实例化对象,而静态变量属于类,只要类加 ...

  2. Linux启动vi编辑器时提示E325: ATTENTION解决方案

    Linux启动vi编辑器时提示E325: ATTENTION解决方案 Vi编辑器是Linux的文本编辑器,在Linux系统的运用非常广泛,不少朋友在打开Vi编辑器的时候提示E325: ATTENTIO ...

  3. Github使用教程(一)------ 初识Github

    上一节我们解决了Github网站响应慢,加载不完全的情况,接下来我们就要正式开始使用Github了. :好,那我先安装Git,稍后就上传项目. :......你Github网站都看懂了? :还需要看懂 ...

  4. 02:BeautifulSoup

    1.1 BeautifulSoup介绍 1.BeautifulSoup作用 1.BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化 2.之后遍可以使用他 ...

  5. 20145206邹京儒 web安全基础实践

    20145206邹京儒 web安全基础实践 一.实践过程记录 关于WebGoat 1.我们在命令行里执行:java -jar webgoat-container-7.0.1-war-exec.jar运 ...

  6. Win32建立右键弹出菜单(PopMenu)

    自定义右键菜单: #ifndef _CONTEXTMENU_H_ #define _CONTEXTMENU_H_ #include <windows.h> //动态菜单 #define I ...

  7. C++11 正则表达式——实例系统(转载)

    一.用正则表达式判断邮箱格式是否正确 1 #include <regex> #include <iostream> #include <string> bool i ...

  8. java.lang.NoClassDefFoundError错误

    根据前文,很明显NoClassDefFoundError的错误是因为在运行时类加载器在classpath下找不到需要加载的类,所以我们需要把对应的类加载到classpath中,或者检查为什么类在cla ...

  9. Linux进程间通信--使用信号量【转】

    本文转载自:http://blog.csdn.net/ljianhui/article/details/10243617 这篇文章将讲述别一种进程间通信的机制——信号量.注意请不要把它与之前所说的信号 ...

  10. Linux系统编程之--守护进程的创建和详解【转】

    本文转载自:http://www.cnblogs.com/mickole/p/3188321.html 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终 ...