Skip to main content

moregeek program

opencv基础 | 1.像素运算_domi+1的博客-多极客编程

✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。

🍎个人主页:算法工程师的学习日志

图像像素运算

  • 算术运算
  • 加,减,乘,除
  • 应用:调节亮度,调整对比度
  • 逻辑运算
  • 与,或,非

  • 应用:遮罩层控制

  • 改变对比度,亮度


图片读入程序中后,是以numpy数组存在的。因此对numpy数组的一切功能,对图片也适用。对数组元素的访问,实际上就是对图片像素点的访问。

彩色图片访问方式为:img[i,j,c]

i表示图片的行数,j表示图片的列数,c表示图片的通道数(RGB三通道分别对应0,1,2)。坐标是从左上角开始。

灰度图片访问方式为:gray[i,j]

1.算术运算

两张形状大小完全相同的图进行加减乘除,如果图像大小不一致,会报错,可以通过cv2.resize函数裁剪图片到同一个尺寸,原图如下

OpenCV基础 | 1.像素运算_像素点OpenCV基础 | 1.像素运算_python_02


  • 两张图片的各个像素点的通道值相加
  • 黑为0,白为255,像素值相加后得到新的像素值,如果像素值结果超过255,进行截断,最终结果还是255,即为白色
import cv2


p = cv2.imread('./python1.jpg')
m = cv2.imread('./matlab.jpg')


dst = cv2.add(p, m)
cv2.imshow("add_demo", dst)
cv2.waitKey(0)
  • 应用:去除叠加性噪声 ,生成图像叠加效果

OpenCV基础 | 1.像素运算_像素点_03

  • 两张图片各个像素点的通道值相减
  • 黑为0,白为255,如果相减后像素值为负值,而范围是0-255,因此取0,即为黑;
import cv2


p = cv2.imread('./python1.jpg')
m = cv2.imread('./matlab.jpg')


dst = cv2.subtract(p, m)
cv2.imshow("add_demo", dst)
cv2.waitKey(0)
  • OpenCV基础 | 1.像素运算_逻辑运算_04

  • 应用:显示两幅图像的差异,检测同一场景 两幅图像之间的变化;图像分割,如分割运动的车辆,减法去掉静止的部分,剩余的是运动元素和噪声。

  • 两张图片各个像素点的通道值相乘



  • 黑为0,0*图二中任意的一个像素值为0,为黑,因为python图都是白色居多,弄个求反图片变黑,python图外边框是反锯齿的(边缘柔化),有模糊的,并不一定都为0,因此相乘之后会出现那种像烟花的边边



  • import cv2


    p = cv2.imread('./python1.jpg')
    m = cv2.imread('./matlab.jpg')


    dst = cv2.multiply(255-p, m)
    cv2.imshow("demo", dst)
    cv2.waitKey(0)


  • OpenCV基础 | 1.像素运算_python_05


  • 应用:图像的局部显示,用二值模板图像与原图像做乘法





  • 两张图片各个像素点的通道值相除



  • 应用少



  • import cv2


    p = cv2.imread('./python1.jpg')
    m = cv2.imread('./matlab.jpg')


    dst = cv2.divide(p, 255-m)
    cv2.imshow("demo", dst)
    cv2.waitKey(0)


  • OpenCV基础 | 1.像素运算_逻辑运算_06

2.逻辑运算

  • 全1得1
import cv2


p = cv2.imread('./python1.jpg')
m = cv2.imread('./matlab.jpg')


dst = cv2.bitwise_and(p, m)
cv2.imshow("demo", dst)
cv2.waitKey(0)
  • OpenCV基础 | 1.像素运算_python_07

  • 相当于一个mask
  • 应用:求两个子图的相交子图

  • 有1得1



  • import cv2


    p = cv2.imread('./python1.jpg')
    m = cv2.imread('./matlab.jpg')


    dst = cv2.bitwise_or(p, m)
    cv2.imshow("demo", dst)
    cv2.waitKey(0)


  • OpenCV基础 | 1.像素运算_像素点_08


  • 应用:合并图片





  • 0得1,1得0 ,针对的是一张图,等效于255-p



  • import cv2


    p = cv2.imread('./python1.jpg')
    m = cv2.imread('./matlab.jpg')


    dst = cv2.bitwise_not(p)
    cv2.imshow("demo", dst)
    cv2.waitKey(0)


  • OpenCV基础 | 1.像素运算_像素点_09


  • 应用:获得图片的补图


3.改变对比度,亮度

def contrast_brightness_demo(image, c, b):
h, w, ch = image.shape
#初始化一张黑图
blank = np.zeros([h, w, ch], image.dtype)

# 图像混合,c, 1-c为这两张图片的权重
dst = cv.addWeighted(image, c, blank, 1-c, b)
cv.imshow("contrast_brightness_demo", dst)

src=cv.imread("./images/lena.jpg")
#对比度1.2,亮度100
contrast_brightness_demo(src,1.2,100)

结果如下:

OpenCV基础 | 1.像素运算_像素点_10OpenCV基础 | 1.像素运算_逻辑运算_11



©著作权归作者所有:来自51CTO博客作者domi+1的原创作品,请联系作者获取转载授权,否则将追究法律责任

python pycharm新建项目自动添加介绍和utf-8编码_domi+1的博客-多极客编程

✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。 🍎个人主页:算法工程师的学习日志你是不是觉得每次新建项目都要写一次​​# coding:utf-8​​,感觉特烦人呐!懒(fu)人(li)教程来啦,先看效果图吧如图进入设置然后将下列内容粘贴进去就行了,是不是很简单# !/usr/bin/env python# -*- encoding: utf-8 -*-"""

[oeasy]python0015_十六进制_hexadecimal_字节形态_hex函数_overmind1980的博客-多极客编程

十六进制(hexadecimal)回忆上次内容上次数制可以转化 bin(n)可以把数字转化为 ​​2进制​​binary接收一个整数(int)得到一个二进制数形式的字符串数字在计算机中是用二进制存储的 但是展示给我们的时候用的是十进制也就是0-9这10个字符的形式都说字节是计算机存储的最小单位这些数字在字节里面长什么样子呢?🤔字节首先明确字节长什么样子?1 个 字节(byte) 正好 8 个 位(

python绘制精美可视化数据分析图表(一)-matplotlib_迷彩编程的博客-多极客编程

前言数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程.这一过程也是质量管理体系的支持过程.在实用中,数据分析可帮助人们作出判断,以便采取适当行动在DT时代,数据分析是企业做出重要决策的基础,巧妇难为无米之炊,数据就是米,是数据分析基础中的基础,但是没有经过整理的数据,或许杂乱无章,没有任何意义,通过数据分析相关手段处理之后,让数

python 深度学习目标检测评价指标_domi+1的博客-多极客编程

✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。 🍎个人主页:算法工程师的学习日志目标检测评价指标:准确率 (Accuracy),混淆矩阵 (Confusion Matrix),精确率(Precision),召回率(Recall),平均正确率(AP),mean Average Precision(mAP),交除并(IoU),ROC + AUC,非极大值抑制(NM

python已有列表和字典,为什么还需要元组?_迷彩编程的博客-多极客编程

元组的介绍学习了列表和字典之后,再学习元组感觉它没有使用的必要.而且列表和字典已经够用,为什么有了列表还需要元组呢?这个Python特有的数据类型有何作用呢?元组是由简单的对象构成的,他是和列表非常相似的数据类型,但元组是不可变的,他不支持任何方法的调用,也就是说,我们不能编辑和改变元组,其实正是因为元组的特有性质:不可变性;这个特性提供了一种完整性,他可以保证元组所在的处不会被程序修改,正是列表

linux python web 离线部署非 docker部署_胡六六的博客-多极客编程

实际项目中,避免不了遇到私有化部署。不能在线安装有些问题,项目中各种包需要很多依赖非常痛苦。如果,项目支持容器化部署这个是最简单的。以下介绍离线安装 Python包、包相关deb依赖 安装环境 Debian 11 安装 python 离线和安装 pip wheel --wheel-dir=生成路径 -r requirments.txt # 离线 pip install --no-index --f

强引用、软引用、弱引用、幻象引用有什么区别和使用场景_write less,do more。的博客-多极客编程

引用类型 在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用;Java中根据其生命周期的长短,将引用分为4类。不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。 强引用 特点:所谓强引用("Strong" Reference),就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,我们平常典型编码Object

c++不知算法系列之集结常规算法思想_一枚大果壳的博客-多极客编程

1. 前言 数据结构和算法是程序的 2 大基础结构,如果说数据是程序的汽油,算法则就是程序的发动机。 什么是数据结构? 指数据之间的逻辑关系以及在计算机中的存储方式,数据的存储方式会影响到获取数据的便利性。 现实生活中,如果把春夏秋冬的衣物全部堆放在一起,当需要某一季节的衣服时,寻找起来是困难的。如果分门别类、有条理地存放,则寻找起来会方便很多。同理,编写程序时,如果对程序所依赖的数据有条理、易于

python pycharm新建项目自动添加介绍和utf-8编码_domi+1的博客-多极客编程

✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。 🍎个人主页:算法工程师的学习日志你是不是觉得每次新建项目都要写一次​​# coding:utf-8​​,感觉特烦人呐!懒(fu)人(li)教程来啦,先看效果图吧如图进入设置然后将下列内容粘贴进去就行了,是不是很简单# !/usr/bin/env python# -*- encoding: utf-8 -*-"""

深度学习基础知识串烧_domi+1的博客-多极客编程

分享一些最近看到的深度学习文章,大概整理了一些基础知识作为入门,1.CNN模型具体分析(AlexNet网络结构)1.1 网络结构AlexNet有5个卷积层和3个全连接层C1:96×11×11×3 (卷积核个数/宽/高/深度)               34848个C2:256×5×5×48(卷积核个数/宽/高/深度)           307200个C3:384×3×3×256(卷积核个数/宽

linux环境搭建和常用命令(二)_mb62c3ac8538829的博客-多极客编程

Linux一 关于linux什么是Linux?用在哪些地方?Linux是一套操作系统,和我们熟悉的windows,苹果电脑的macOS一样,都是可以在电脑上运行的操作系统。Linux在我们的日常生活中看上去是用不到。其实不是,Linux在我们生活中的方方面面都起着作用,我们的手机上使用的安卓系统正是Linux的一个分支,家里用的路由器,机顶盒可能是Linux系统的,银行里的ATM机,电视上的超级计

java新特性(2):java 10以后_湘王的博客-多极客编程

您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~虽然到目前为止Java的版本更新还没有什么惊天动地的改变,但总是会冒出一些有趣的小玩意。前面列举了Java9和Java10的一些特色,现在接着来看一下Java11之后的新奇特。Java9更新了Http 2 Client,也说过先不着急看,因为在后续版本中语法会变。这不,到Java11就实现了。最直接的变化就是http相关包名由Java