python OpenCV 图像通道数判断

目录
  • 前言
  • 教程
    • 1、读取/保存图片
      • 1)imread和imwrite方法
      • 2)imdecode和imencode方法
    • 2、编码转换
      • 1)BGR转RGB
      • 2)BGR转GRAY
    • 3、快速判断图像是否单通道灰度图
    • 4、获取图像通道数

前言

OpenCV是图像处理常用的库,作为初学者,往往从图片的读取、保存、查询图片的信息开始,下面将分享Python下OpenCV的一些基本使用方法,掌握这些基本方法后,能够更好地与matplotlib、numpy等结合使用,完成相应的图像操作。

教程

1、读取/保存图片

1)imread和imwrite方法

注:此方法遇到中文路径会报错!

import cv2

# 参数1:文件路径
# 参数2:读取方式
# 常用几种模式:
# 	灰度图:cv2.IMREAD_GRAYSCALE
#	BGR三通道彩色图:cv2.IMREAD_COLOR
#	原始通道(自动判断:单通道/三通道/四通道等):cv2.IMREAD_UNCHANGED
img = cv2.imread('图像文件路径(全英文)', cv2.IMREAD_COLOR)

# 参数1:文件路径
# 参数2:待保存的图像(BGR格式的uint8 ndarray类型)
# 参数3【可选】:压缩模式以及质量等
# 常用几种模式:
# 	灰度图:cv2.IMREAD_GRAYSCALE
#	BGR三通道彩色图:cv2.IMREAD_COLOR
#	原始通道(自动判断:单通道/三通道/四通道等):cv2.IMREAD_UNCHANGED
img_saved = cv2.imwrite('图像输出路径(含图像名)', img)

2)imdecode和imencode方法

import cv2
import numpy as np

# cv2.imdecode():从指定的内存缓存中读取数据,并把数据转换成图像格式
src_img_path = './image.png'
img=cv2.imdecode(np.fromfile(src_img_path, dtype=np.uint8),cv2.IMREAD_UNCHANGED)

# cv2.imencode():将图片格式转换成流数据,写入内存缓存中,可以再调用.tofile()写入到磁盘中
out_img_path = './image.jpg'
extension = '.jpg'
cv2.imencode(extension,img)[1].tofile(out_img_path)

2、编码转换

1)BGR转RGB

matplotlib.pyplot的imshow()方法广泛用于显示图像,然而opencv默认加载的图像时BGR格式,直接显示会出现颜色异常,需要先进行转换

img_rgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

2)BGR转GRAY

三通道的BRG彩色图像转换成单通道的灰度图

img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

3、快速判断图像是否单通道灰度图

if img.ndim == 2:
	print('图像是单通道灰度图')
else:
	print('图像包含多个通道')

4、获取图像通道数

def get_n_channel(img):
	if img.ndim == 2:
		print('通道数:1')
		return 1
	else:
		print('图像包含多个通道')
		return img.shape[2]

到此这篇关于python OpenCV 图像通道数判断的文章就介绍到这了,更多相关OpenCV 图像通道数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python OpenCV实现图像模板匹配详解

    目录 1.什么是模板匹配及模板匹配方法matchTemplate() 介绍 素材准备 2.单模板匹配 2.1 单目标匹配 2.2 多目标匹配 3.多模板匹配 1.什么是模板匹配及模板匹配方法matchTemplate() 介绍 提供一个模板图像,一个目标图像,且满足模板图像是目标图像的一部分,从目标图像中寻找特定的模板图像的过程,即为模板匹配.OpenCV提供了matchTemplate()方法帮助我们实现模板匹配. 该方法语法如下: cv2.matchTemplate(image, templ

  • Python OpenCV一个窗口中显示多幅图像

    在使用opencv显示图像时,有时候需要显示多张图像,就会出现多个窗口,显得冗余,用户不好操作.这时候就想着能不能将这些图像在一个窗口中显示. 方法1:创建画布,将所有图像复制到画布中,最后显示画布 # 方法1:创建一个画布,将所有图像复制到画布中,最后显示画布 h, w, _ = img.shape img_list = [img, invert, gaussianBlur, flip] # 图像列表 four_view = np.zeros((h * 2 + 10, w * 2 + 10,

  • Python Opencv基于透视变换的图像矫正

    本文实例为大家分享了Python Opencv基于透视变换的图像矫正,供大家参考,具体内容如下 一.自动获取图像顶点变换(获取图像轮廓顶点矫正) 图像旋转校正思路如下 1.以灰度图读入2.腐蚀膨胀,闭合等操作3.二值化图像4.获取图像顶点5.透视矫正 #(基于透视的图像矫正) import cv2 import math import numpy as np def Img_Outline(input_dir):     original_img = cv2.imread(input_dir)

  • Python OpenCV图像处理之图像滤波特效详解

    目录 1分类 2邻域滤波 2.1线性滤波 2.2非线性滤波 3频域滤波 3.1低通滤波 3.2高通滤波 1 分类 图像滤波按图像域可分为两种类型: 邻域滤波(Spatial Domain Filter),其本质是数字窗口上的数学运算.一般用于图像平滑.图像锐化.特征提取(如纹理测量.边缘检测)等,邻域滤波使用邻域算子——利用给定像素周围像素值以决定此像素最终输出的一种算子 频域滤波(Frequency Domain Filter),其本质是对像素频率的修改.一般用于降噪.重采样.图像压缩等. 按

  • 关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)

    前一篇研究了opencv二值化方法threshold的使用,但是这个方法也存在一定的局限性,假如有一张图存在明显的明暗不同的区域,如下图 可以看到左边部分因为整体偏暗,导致二值化后变成全黑,丢失了所有细节,这显然不是我们想要的结果. 原因threshold函数使用一个阈值对图像进行二值化,导致小于这个阈值的像素点全都变成0.因此使用一个阈值的二值化方法并不适用于上面的这张图.那怎么搞? 很明显,上面这张图只有左右两个区域明显亮度不同,最简单的方法就是把图分成两个区域,每个区域分别进行二值化,也就

  • Python+OpenCV实现在图像上绘制矩形

    话不多说,直接上代码 import copy import cv2 import numpy as np WIN_NAME = 'draw_rect' class Rect(object): def __init__(self): self.tl = (0, 0) self.br = (0, 0) def regularize(self): """ make sure tl = TopLeft point, br = BottomRight point ""

  • 基于Python OpenCV实现图像的覆盖

    目录 前言 1.导入相关库 2.使用OpenCV读取和显示图像 3.从物体的图像中去除背景 4.添加对象到背景图像 5.结果展示 前言 在本文中,我将展示如何将对象从一个图像添加到另一个图像.为此,我们需要: 1.背景图像; 2.对象 3.对象的mask(mask为黑色,其他空间为白色). 在我们的例子中,背景是一张大海的照片,对象是一杯咖啡.在这里,他们是: 1.导入相关库 现在,使用jupiter notebook创建一个新文件.首先,我们需要导入必要的模块: import cv2 # Op

  • Python OpenCV机器学习之图像识别详解

    目录 背景 一.人脸识别 二.车牌识别 三.DNN图像分类 背景 OpenCV中也提供了一些机器学习的方法,例如DNN:本篇将简单介绍一下机器学习的一些应用,对比传统和前沿的算法,能从其中看出优劣: 一.人脸识别 主要有以下两种实现方法: 1.哈尔(Haar)级联法:专门解决人脸识别而推出的传统算法: 实现步骤: 创建Haar级联器: 导入图片并将其灰度化: 调用函数接口进行人脸识别: 函数原型: detectMultiScale(img,scaleFactor,minNeighbors) sc

  • python OpenCV 图像通道数判断

    目录 前言 教程 1.读取/保存图片 1)imread和imwrite方法 2)imdecode和imencode方法 2.编码转换 1)BGR转RGB 2)BGR转GRAY 3.快速判断图像是否单通道灰度图 4.获取图像通道数 前言 OpenCV是图像处理常用的库,作为初学者,往往从图片的读取.保存.查询图片的信息开始,下面将分享Python下OpenCV的一些基本使用方法,掌握这些基本方法后,能够更好地与matplotlib.numpy等结合使用,完成相应的图像操作. 教程 1.读取/保存图

  • python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)

    图像边框的实现 图像边框设计的主要函数 cv.copyMakeBorder()--实现边框填充 主要参数如下: 参数一:源图像--如:读取的img 参数二--参数五分别是:上下左右边的宽度--单位:像素 参数六:边框类型: cv.BORDER_CONSTANT--cv.BORDER_REPLICATE--cv.BORDER_REFLECT--cv.BORDER_WRAP--cv.BORDER_REFLECT_101--cv.BORDER_TRANSPARENT--cv.BORDER_REFLEC

  • 详解python opencv图像混合算术运算

    目录 图片相加 cv2.add() 按位运算 图片相加 cv2.add() 要叠加两张图片,可以用 cv2.add() 函数,相加两幅图片的形状(高度 / 宽度 / 通道数)必须相同.         numpy中可以直接用res = img + img1相加,但这两者的结果并不相同(看下边代码):         add()两个图片进行加和,大于255的使用255计数.         numpy会对结果取256(相当于255+1)的模: import numpy as np import c

  • Python OpenCV 图像区域轮廓标记(框选各种小纸条)

    学在前面 上篇 OpenCV 博客原计划完成一个 识别银行卡号的项目,但是写的过程中发现,技术储备不足,我无法在下述图片中,提取出卡号区域,也就无法进行后续的识别了,再次意识到了自己技术还不达标,继续学习.完不成,就实现其它学习项目. 轮廓识别实战 先看一下最终实现的效果,针对一张图片(该图片前景色和背景色差异较大),进行轮廓标记. 图片基本处理 import cv2 as cv src = cv.imread("./demo.jpg") gray = cv.cvtColor(src,

  • Python OpenCV 图像平移的实现示例

    每次学习新东西的时候,橡皮擦都是去海量检索,然后找到适合自己理解的部分. 再将其拼凑成一个小的系统,争取对该内容有初步理解. 今天这 1 个小时,核心要学习的是图像的平移,在电脑上随便打开一张图片,实现移动都非常简单,但是在代码中,出现了一些新的概念. 检索 OpenCV 图像平移相关资料时,碰到的第一个新概念是就是 仿射变换. 每次看到这样子的数学名字,必然心中一凉,做为一个数学小白,又要瑟瑟发抖了. 百度一下,看看百科中是如何介绍的. 看过上图中的一些相关简介之后,对于这个概念也并没有太深刻

  • Python OpenCV图像颜色变换示例

    目录 给图像添加颜色 图像按位操作 图像的通道操作 给图像添加颜色 在使用OpenCV操作图像时,有时候需要给图像添加不同的颜色,以达到不同的风格效果.这里介绍的主要是opencv中的cv.applyColorMap()函数. 给图像应用颜色函数cv.applyColorMap(src, colormap, dst=None)src:表示传入的原图:colormap:颜色图类型(17种).可以单独使用,也可以以一个列表的形式批量使用. 以下图举例实现: 直接上代码: # -*-coding:ut

  • python opencv 图像尺寸变换方法

    利用Python OpenCV中的 cv.Resize(源,目标,变换方法)就可以实现变换为想要的尺寸了 源文件:就不用说了 目标:你可以对图像进行倍数的放大和缩小 也可以直接的输入尺寸大小 变换的方法: CV_INTER_NN - 最近邻插值, CV_INTER_LINEAR - 双线性插值 (缺省使用) CV_INTER_AREA - 使用象素关系重采样.当图像缩小时候,该方法可以避免波纹出现.当图像放大时,类似于 CV_INTER_NN 方法.. CV_INTER_CUBIC - 立方插值

  • python中图像通道分离与合并实例

    我就废话不多说了,直接上代码吧! import cv2 img = cv2.imread("1.jpg") b, g, r = cv2.split(img)  #分离函数 merged = cv2.merge([b,g,r]) #合并函数 cv2.imshow('image',img) cv2.imshow("Blue 1", b) cv2.imshow("Green 1", g) cv2.imshow("Red 1", r)

  • Python+OpenCV 图像边缘检测四种实现方法

    目录 1.Sobel算子 2.Schaar算子(更能体现细节) 3.Laplacian算子(基于零穿越的,二阶导数的0值点) 4.Canny边缘检测(被认为是最优的边缘检测算法) 总结 import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 设置兼容中文 plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = [

  • python opencv图像的高通滤波和低通滤波的示例代码

    目录 前言 完整代码 低通滤波 高通滤波 结果展示 低通滤波 高通滤波 前言 上一章我们说明了如何将图像机娘傅里叶变换,将图像由时域变换成频域,并将低频移动至图像中心.那么将低频移动中心后,就可以将图像的低频和高频分开,从而进行低通滤波和高通滤波的处理. 完整代码 低通滤波 import cv2 import numpy as np import matplotlib.pyplot as plt # cv2.imread()在读取图像的时候,默认的是读取成RGB图像,cv2.IMREAD_GRA

随机推荐