python如何判断图片为黑白还是彩色

基本原理

灰度图分两种情况:

单通道的图片
RGB 三通道的图片,但是每个通道的值相等
对于单通道的图片只需要判断图片的通道值是否为1

对于RGB模式的图片,情况稍稍复杂些。理论上只需判断RGB三个通道的值是否相等,但是现实中灰度图常常各通道间存在轻微差异,但是人眼难以察觉,依旧可以认为是灰度图。所以现实中,应该判断三个通道间的差异大小比较合理。
这里采取的策略是计算三个通道间像素值的差的方差的均值,小于一定阈值的就判断为灰度图。

实现

# 黑白照片(灰度图)识别
def isGrayMap(img, threshold = 15):"""入参:img:PIL读入的图像threshold:判断阈值,图片3个通道间差的方差均值小于阈值则判断为灰度图。阈值设置的越小,容忍出现彩色面积越小;设置的越大,那么就可以容忍出现一定面积的彩色,例如微博截图。如果阈值设置的过小,某些灰度图片会被漏检,这是因为某些黑白照片存在偏色,例如发黄的黑白老照片、噪声干扰导致灰度图不同通道间值出现偏差(理论上真正的灰度图是RGB三个通道的值完全相等或者只有一个通道,然而实际上各通道间像素值略微有偏差看起来仍是灰度图)出参:bool值"""if len(img.getbands()) == 1:return Trueimg1 = np.asarray(img.getchannel(channel=0), dtype=np.int16)img2 = np.asarray(img.getchannel(channel=1), dtype=np.int16)img3 = np.asarray(img.getchannel(channel=2), dtype=np.int16)diff1 = (img1 - img2).var()diff2 = (img2 - img3).var()diff3 = (img3 - img1).var()diff_sum = (diff1 + diff2 + diff3) / 3.0if diff_sum <= threshold:return Trueelse:return False

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/810271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

局域网内部使用的视频会议系统推荐

随着远程办公的普及和全球化的发展趋势&#xff0c;企业需要一个高效、灵活、安全的音视频会议解决方案&#xff0c;以支持远程办公的协同工作、跨地域沟通等需要。私有化音视频会议就是一个适合企业自身部署的解决方案。它不仅能够满足企业信息管理和保密的需求&#xff0c;而…

广告电商模式:购物得积分 看广告还能赚钱!

互联网时代的浪潮中&#xff0c;电子商务与广告行业日新月异&#xff0c;不断碰撞出全新的火花。在这种背景下&#xff0c;广告电商模式作为一种创新的商业模式崭露头角&#xff0c;它以广告与电商的深度融合为核心&#xff0c;通过精准化的营销手段与用户的积极参与&#xff0…

基于SpringBoot+Vue的咖啡商城(带文档)

项目介绍: 基于SpringBootVue的咖啡商城&#xff08;带文档&#xff09; 网上咖啡商城系统&#xff0c;咖啡商城系统 前后端分离&#xff0c;Java开发&#xff0c;Vue框架&#xff0c;Redis分布式缓存&#xff0c;MyBatis 运行环境&#xff1a;JDK1.8MySQLMavenRedisNode.js 项…

前端开发攻略---面对复杂多变的甲方需求,一个成熟的程序员该如何应对呢?独门秘籍

以下招式&#xff0c;过于狠毒&#xff0c;谨慎使用&#xff0c;如有后果&#xff0c;概不负责 1、甲方要求优化首页白屏 优化前 setTimeout(() > {createApp(App).mount(#app)}, 3000) 优化后 setTimeout(() > {createApp(App).mount(#app)}, 1000) 注意&#xff1a;记得…

高通user版本diag口无法正常连接QXDM调试

modem同事调试网络问题&#xff0c;需要连QXDM读取设备信息和抓取log&#xff0c;正常不做修改的user版本只有9091的端口&#xff0c;但是不显示设备&#xff0c;无法正常连接调试. 出于对厂商安全的考虑&#xff1a; 修改位置: device/qcom/sepolicy_vndr/generic/vendor/co…

【灵境矩阵】零代码创建AI智能体之行业词句助手

欢迎来到《小5讲堂》 这是《灵境矩阵》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 创建智能体选择创建方式零代码 基础配置头像名称简介指令开场白…

Fiddler:网络调试利器

目录 第1章:Fiddler简介和安装 1.1 Fiddler概述 1.2 Fiddler的安装步骤 步骤1:下载Fiddler 步骤2:运行安装程序 步骤3:启动Fiddler 1.3 配置Fiddler代理 配置操作系统代理 配置浏览器代理 Google Chrome Mozilla Firefox 第2章:Fiddler界面和基本操作 2.1 Fi…

鸿蒙内核源码分析 (物理内存篇) | 怎么管理物理内存

如何初始化物理内存&#xff1f; 鸿蒙内核物理内存采用了段页式管理&#xff0c;先看两个主要结构体。结构体的每个成员变量的含义都已经注解出来&#xff0c;请结合源码理解. #define VM_LIST_ORDER_MAX 9 //伙伴算法分组数量&#xff0c;从 2^0&#xff0c;2^1&#…

【vue】ref 和 reactive 对比

ref&#xff1a;存储单个数据&#xff0c;如数值&#xff0c;字符串reactive&#xff1a;存储复杂数据&#xff0c;如对象&#xff0c;数组 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"vie…

创建vue3项目遇到的部分问题及解决方式

export default defineConfig({server: {// https: true,// 启用https协议&#xff0c;默认是HTTP协议host: true, // 监听所有地址port: 1314,// 前端项目启动的端口号open: true,// 开启代理cors: false, // 为开发服务器配置 CORSproxy: {^/api: {target: ,// 服务器地址cha…

P24 C# 类

&#xff08;1&#xff09;、类修饰符&#xff1a; new: public&#xff1a;外部可自由访问 protected: 访问限制在继承链上 internal: 在当前的项目中&#xff0c;可以自由访问&#xff0c;默认的访问级别 private: 只能修饰类的成员类&#xff08;内部类的可以&#x…

(Java)数据结构——图(第七节)Folyd实现多源最短路径

前言 本博客是博主用于复习数据结构以及算法的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 Folyd实现原理 中心点的概念 感觉像是充当一个桥梁的作用 还是这个图 我们常在一些讲解视频中看到&#xff0c;就比如dist&#xff08;-1&#xff09;&#xff0…

WooCommerce的使用方式和特点

WooCommerce是一款基于WordPress的开源电子商务插件&#xff0c;它允许用户在WordPress网站上创建和管理在线商店。以下是WooCommerce的一些使用方式和特点。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.产品管理&#xff1a;Woo…

bugku-web-file_get_contents

<?php extract($_GET); if (!empty($ac)){$f trim(file_get_contents($fn));if ($ac $f){echo "<p>This is flag:" ." $flag</p>";}else{echo "<p>sorry!</p>";} } ?> 这里涉及到几个不常用的函数 这里直接构…

【python处理数据的函数】---误区2

python是 Guido van Rossum设计的一款面向对象的编程语言。首次发布时间为1991 年 2 月。受到 C 与 C、Java 与 Perl、Lisp 与 Haskell语言的启示&#xff0c;但 ABC 语言对 Python语 言有主要的影响&#xff0c;Python 的创立者吉多范罗苏姆&#xff08;Guido van Rossum&…

2024年 Mathorcup高校数学建模竞赛(B题)| 甲骨文识别 | 特征提取,图像分割解析,小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮200人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;通过神经网络解决甲骨文识别问题。结合特征提取&#xff0c;图像分割等多元算法&…

mysql定时任务-事件调度器(Event Scheduler)

1 查看事件调度器是否开启 SHOW VARIABLES LIKE event_scheduler; SELECT event_scheduler; SHOW PROCESSLIST; 2 开启或关闭事件调度器 &#xff08;1&#xff09;临时开启/关闭 -- 开启事件调度器 SET GLOBAL event_scheduler ON; -- 关闭事件调度器 SET GLOBAL event…

关于Ansible的模块 ⑦

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 在继《关于Ansible的模块 ①》、《关于Ansible的模块 ②》、《关于Ansible的模块 ③》与《关于Ansible的模块 ④》、《关于ansib…

python基础——python包【创建和导入,下载第三方包】

&#x1f4dd;前言&#xff1a; 在上一篇文章python基础——模块中&#xff0c;我们讲解了有关python模块的相关知识&#xff0c;这篇文章我们进一步讲解用于储存多个模块文件的python包&#xff1a; 1&#xff0c;什么是python包 2&#xff0c;如何创建和导入python包 3&#…

选择排序解读

在计算机科学中&#xff0c;排序算法是一种将数据元素按照某种顺序排列的算法。今天&#xff0c;我们要探讨的是选择排序&#xff08;Selection Sort&#xff09;&#xff0c;这是一种简单直观的排序方法&#xff0c;通过不断选择剩余元素中的最小&#xff08;或最大&#xff0…