opecv浅记

这篇博客从代码,理论以及一些实际操作角度讲解像素运算

长文

文章目录

  • opecv浅记
  • 像素点的运算
    • 1.像素点
    • 2.对像素点运算
      • ①.普通运算
      • ②.逻辑运算
    • 3.简单应用及其原理
      • ①.图像的对比度与亮度操作
      • ②.图像融合(凯隐和拉亚斯特,原谅博主中二了。:joy:)
      • ③.炫彩logo
      • ④.动态提取彩色的颜色帧
  • 总结

像素点的运算

像素点的运算即,基于OpenCV可调用API的运算,或者以numpy做一些简易的运算,但是还是更偏向于与直接调用API,它一般要比我们用numpy实现的算法高效很多。

1.像素点

在第一篇OpenCV的文章中,我们已经提过,一般情况下,一个图片的包含了,高,宽,通道数,三个指标。在RBG色彩空间中,每个通道数对应三原色中的一种,总共三个通道。

0——蓝
1——绿
2——红
可用 image.shape将高,宽,通道数调出。

所谓的像素点,其实就是在(0,0,0)到 (高,宽,3)区间内的点,我们假设取一个(x,y,z)
那么x便是高度,y为宽度,而z便是当前通道数,也可以说当前维度,先前曾写过遍历每个像素点并进行计算的代码,如下:

def get_image_info(image):height=image.shape[0]width=image.shape[1]channels=image.shape[2]print('height: {},width: {},channels: {}'.format(image.shape[0],image.shape[1],image.shape[2]))for i in range(height):for j in range(width):for c in range(channels):cv=image[i,j,c]image[i,j,c]=255-cvreturn image

其本质为,对一个图像的取反操作。
对三维空间来说,很容易理解,那么我们再来看每个像素点的值,在读图时,我们可以用dtype方法将数据位数输出出来,通常为uint8,即无符号八位,这就跟像素点的取值产生了关系,无符号八位的取值为0~255,这与像素点的取值范围相同,而255对应着最亮,0对应的最暗,通道0的每个点若都取到255,则为一张纯蓝色的图,先前已经说过,这里提出只是更透彻地明白像素点的含义。

2.对像素点运算

对像素点的运算可以笼统的分为两大类:普通运算与逻辑运算

①.普通运算

加减乘除,加权加法,均值与方差
像素运算,更可以从矩阵的每个元素的运算来理解。由简入繁,从简单的来说,如下是两个三维矩阵这里只打印其中一个,对应三通道:

import numpy as nparray_1=np.ones([2,2,3],np.uint8)
array_2=np.ones([2,2,3],np.uint8)
print(array_1)


像素点的加法,是对其中每个元素进行相加。得到如下:

接下来对图像文件进行操作,加法:

def __add__(image_1,image_2):re_image=cv.add(image_1,image_2)return re_image

结果如下,这时候我们如果将,他们按矩阵打印出来,就会发现,与上面的简单加法是相同的。


减法,乘法,除法类似:

#像素运算,相减,从1中扣去2
def __subtract__(image_1,image_2):return cv.subtract(image_1,image_2)
#像素,相除操作,除以2
def __divide__(image_1,image_2):return cv.divide(image_1,image_2)
#像素的乘法
def __multiply__(image_1,image_2):    return cv.multiply(image_1,image_2)

这里我们就不难想到了,既然规定范围为0~255那么,乘法在很大概率上都会超过255,除法在很大概率上都会很小,因此乘法得到的图像白色居多,而除法得到的图像黑色居多。

加权加法:

cv2.addWeighted(image1,w1,image2,w2,b)

将它的返回值视为一个y的话,其实它是对每个像素点进行这样的计算:
取均值
这里的均值取得是每个通道图的均值,即假设有三个通道,那么返回的应该是一个四元组,前三元每一元对应每个通道图的所有值所求的均值,最后一元应该是alpha通道,对应透明度,可以稍作验证:

import numpy as np
import cv2 as cvarray_1=np.ones([2,2,3],np.uint8)
array_2=np.ones([2,2,3],np.uint8)
array_3=np.ones([2,2,3],np.uint8)*2
print(array_3)
print(cv.mean(array_3))

结果:

没什么问题。
方差与均值
可调用以下API

import numpy as np
import cv2 as cvarray_1=np.ones([2,2,3],np.uint8)
array_2=np.ones([2,2,3],np.uint8)
array_3=np.ones([2,2,3],np.uint8)*2
print(array_3)
print(cv.meanStdDev(array_3))

结果:第一个array为上面所说,第二个array为方差

②.逻辑运算

逻辑运算,位运算,在很多人在高中就已经接触到了二进制,但是对于二进制的按位运算应该还是在大学开始的。位运算先前有写过博客,对于像素的位运算,我们只说三种
按位与,按位或,按位取反,在此之前,我们需要说一下三种简单的位运算。

按位取反。。。淦,之前的博客没写,没法截图偷懒了。。。
按位取反很简单,对0取1,对1取0,对于001101来说就是110010
对于像素点的逻辑运算需要借用opencv的API:

#逻辑运算
def __logicopera__(image_1,image_2):cv.imshow('logic_1',cv.bitwise_and(image_1,image_2))cv.imshow('logic_2',cv.bitwise_or(image_1,image_2))cv.imshow('logic_3',cv.bitwise_not(image_1))

其结果:

从像素点的角度来说,主要说一下取反的操作,这里的取反其实是与开头那段代码的作用不谋而合的,即对每个像素点进行255-的操作。至于按位与和按位或,应该可以自己理解。

3.简单应用及其原理

在介绍完几种运算,可以实现一些简单的应用,
这里还要说到一个东西,掩膜,我们利用inRange方法提取出来的东西,通称之为掩掩膜,对于该方法陌生的小伙伴:点击这里,最后的代码有细说。掩膜,即提取图像的某部分后,仅仅该部分为白色,其余为黑色。很多操作都需要用到掩膜。

①.图像的对比度与亮度操作

调用OpenCVAPI,加权加法运算

#图像的对比度与亮度操作 通过加权运算实现
def contrast__brightness(image,c,b):#通过原图与黑图的加权运算h,w,ch=image.shapeblank_image=np.zeros([h,w,ch],image.dtype)dst=cv.addWeighted(image,c,blank_image,1-c,b)cv.imshow('dst',dst)

如下为效果,左图为原图,该代码可用于简单的美白。

OpenCV像素点的计算,好家伙,直接降龄化教学。。。代码对图片的神奇操作~~~~~~相关推荐

  1. OpenCV像素点邻域遍历效率比较,以及访问像素点的几种方法

    OpenCV像素点邻域遍历效率比较,以及访问像素点的几种方法 前言: 以前笔者在项目中经常使用到OpenCV的算法,而大部分OpenCV的算法都需要进行遍历操作,而且很多遍历操作都是需要对目标像素点的 ...

  2. 信用卡数字识别(opencv,轮廓计算)

    目录 1.项目数据及源码 2.环境配置 2.1.导入工具包 2.2.设置参数 3.模板处理 3.1.转二值图像 3.2.计算轮廓 4.数据处理 4.1.初始化卷积核,图像预处理 4.2.顶帽操作 4. ...

  3. 使用OpenCV,Numpy计算直方图,Matplot绘制直方图及分析

    使用OpenCV,Numpy计算直方图,Matplot绘制直方图及分析 1. 效果图 2. 原理 3. 源码 3.1 直方图3种计算方法和2种绘制方法 3.2 Mask遮罩图像直方图 参考 这篇博客将 ...

  4. 使用OpenCV和Python计算图像的“彩色度”

    使用OpenCV和Python计算图像"彩色度" 1. 效果图 2. 炫彩度量方法是什么? 3. 源代码 参考 你是否尝试过计算每个图像的炫彩值,并根据炫彩值对自己的图像数据集进行 ...

  5. OpenCV Lucas-Kanade光流计算的实例(附完整代码)

    OpenCV Lucas-Kanade光流计算的实例 OpenCV Lucas-Kanade光流计算的实例 OpenCV Lucas-Kanade光流计算的实例 #include <iostre ...

  6. 详解为什么OpenCV的直方图计算函数calcHist()计算出的灰度值为255的像素个数为0

    在使用OpenCV的直方图计算函数calcHist()时,发现灰度值为255的像素个数总是为0. 哪怕图像中灰度值为255的像素个数不为0,使用OpenCV的直方图计算函数calcHist()计算出的 ...

  7. OpenCV 图像直方图计算calcHist()

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/keith_bb/article/details/56680997 图像直方图是对数据集合的一种统计方 ...

  8. OpenCV视差图计算

    OpenCV视差图计算 如今立体视觉越来越多的被应用到工业检测.机器人.自动驾驶.AR/VR领域,因为目前自己也在一个产品研发期,自己倒腾了几天做了一些通过双目进行避障的小实验,把一些比较流程化的代码 ...

  9. OpenCV每日函数 计算摄影模块(1) 图像修复算法 inpaint函数

    一.概述 该算法使用区域邻域恢复图像中的选定区域.该功能可用于去除扫描照片上的灰尘和划痕,或去除静止图像或视频中不需要的物体. 二.inpaint函数 1.函数原型 void cv::inpaint ...

最新文章

  1. 【新周报(045)】青少年编程竞赛交流群周报
  2. router vue 多个路径_vue-router 路径问题
  3. 你还以为,除了你自己就没有人懂你女朋友吗?
  4. Spring Boot 线程池的创建、@Async 配置步骤及注意事项
  5. python 3 字典排序_Python学习教程实用技法:通过公共键对字典列表排序—itemgetter...
  6. VTK:可视化之ColorGlyphs
  7. 初识ES-安装IK分词器
  8. 二十年后的回眸(4)——离奇的邂逅
  9. 连载二:Oracle迁移文章大全
  10. 高效 保活长连接:手把手教你实现 自适应的心跳保活机制
  11. linux 设备/dev
  12. oracle developer连接access
  13. 计算机课程设计大全,单片机课程设计题目大全计算机软件及应用IT计算机专业资料-单片(10页)-原创力文档...
  14. access里面的表达式运用_Access表达式
  15. 威联通 Qnap PK 群晖 Synology 安全篇3
  16. 从网络中获取债券收益率数据
  17. 【寒江雪】UV+Depth信息计算世界坐标
  18. scss exceeded maximum budget. Budget 4.00 kB was not met by 130 bytes with a total of 4.13 kB.
  19. 头牌知产介绍速冻水饺商标属于哪一类
  20. 2022年上半年软考科目有哪些?要注意

热门文章

  1. JNI方式遍历HashMap
  2. uniap uni.showModal默认按钮自定义设置
  3. 如何解决office2007里出现盗版与需要验证的小星星图标
  4. 企业微信机器人推送mysql_Zabbix.5.0设置企业微信群机器人推送告警信息
  5. 抓取淘宝商品信息并制作商品信息比价表(以口红为例)
  6. 功能实现思路、逻辑思路、功能、逻辑
  7. tsne原理以及代码实现(学习笔记)
  8. Python图像处理笔记——傅里叶变换
  9. 20230516使用python3确认三门问题
  10. 联想G450笔记本开机后屏幕黑屏的解决办法