今天写代码时,需要将图片的亮度进行调整,我是直接在读出来的 R、G、B三个通道上分别增加了一个固定的值。由于颜色值是在[0, 255]区间内的,正常来讲,即使超出了这个范围,利用 opencv 进行展示之前的合并中,也是会自动截断的。但是还是出现了颜色改变的问题。代码如下:
调整亮度的函数:
def imgeAdjustmentLightness(img) :
B, G, R = cv2.split(img)
b = copy.deepcopy(B)
g = copy.deepcopy(G)
r = copy.deepcopy(R)
for row in range(len(b)) :
for col in range(len(b[row])) :
b[row][col] = b[row][col] + 20
g[row][col] = g[row][col] + 20
r[row][col] = r[row][col] + 20
merged = cv2.merge([b, g, r])
cv2.imshow("after adjust lightness", merged)
主函数:
# -*- coding: UTF-8 -*-
import numpy as np
import cv2
import copy
# 读取图片信息
img = cv2.imread("01.bmp")
cv2.imshow("origin image", img)
imgeAdjustmentLightness(img)
cv2.waitKey(0)
改变之前的原图:
调整亮度,改变之后的图片:
可以看到,很多原来白色的地方都已经变了颜色,一猜就知道,肯定是溢出的问题,但是,为什么会发生溢出呢?为什么没有自动截断呢?
原因其实很简单,因为在调整亮度,加一个特定值的时候,由于通道里的数据类型已经是 np.int8 了,也就是说只有一个子节,最大的存储值也只是 255, 当发生溢出的时候,直接从 0 开始了。。。
也就是说,还没等我们对其进行截断呢,它自己就已经限制住存储范围了。
找到问题的原因了,解决发法也比较简单,直接在改变之前进行亮度调整就可以了。
更改调整亮度的函数为:
def imgeAdjustmentLightness(img) :
B, G, R = cv2.split(img)
b = copy.deepcopy(B)
g = copy.deepcopy(G)
r = copy.deepcopy(R)
for row in range(len(b)) :
for col in range(len(b[row])) :
if b[row][col] > 235 :
b[row][col] = 255
else :
b[row][col] = b[row][col] + 20
if g[row][col] > 235 :
g[row][col] = 255
else :
g[row][col] = g[row][col] + 20
if r[row][col] > 235 :
r[row][col] = 255
else :
r[row][col] = r[row][col] + 20
merged = cv2.merge([b, g, r])
cv2.imshow("after adjust lightness", merged)
改变之后的效果:
其实,就是在增加亮度之前就先判断一波。如果是调低亮度,也是一样的,可以在调低之前,先判断是否能够减去那个亮度的变化值,以防溢出。
调整亮度也可以直接使用 HLS 这个颜色空间,L 就代表了亮度,改变它的效果与 RGB 单通道增加特定值是一样的。但是,溢出的问题就没有这么容易解决了。所以,改变亮度的话,还是 RGB 比较方便一点。
写了一个简单的文件上传页面,但是在上传较大文件(大于20M)时,网页上传后无任何提示。打开控制台,发现报错如下:Failed to load resource: the server responded with a status of 413 (Request Entity Too Large) 简单来说呢,就是请求实体过大导致的错误。我用的服务器是n
有这样一种说法,如今争锋于IT战场的两大势力,MS一族偏重于底层实现,Java一族偏重于系统架构。说法根据无从考证,但从两大势力各自的社区力量和图书市场已有佳作不难看出,此说法不虚,但掌握Java的底层实现对Java程序员来说是至关重要的,本文介绍了Java中的数据在内存中的存储。 2 内存中的堆(stack)与栈(heap) Java程序运行时有6个地方可以存储数据,它们分别是寄存器、栈、堆、静态存储、常量存储和非RAM存储,主要是堆与栈的存储。 &nb
土狼向狮子的演进 来自:IT经理世界 孙丽 通信制造业的草原上有三种动物:狮子——跨国公司;豹子——跨国公司在中国的合资企业; 土狼——地道的中国本土企业。 在狮子眼中,土狼是什么?就是以100对1的兵力蚕食狮子的边缘战场,直至腹心;就是以狮子难以理解的目的疯狂发动价格战,使狮子的利润直线下降;就是以对中国本土市场无与伦比的适应性和理解能力,运用各种“不规范竞争手段”,在复杂的利益关系中灵
※道听途说对于银行业的熟悉、认识程度远高于我。在此,我代表持有民生的朋友及我自己向你表示感谢!呵呵,我就试试看,试着从里面找一点问题出来,那么就可以得到更多道听途说先生的精辟解释。来吧!大家都来找其中的问题,以方便于我们更客观的了解我们所持有的民生是什么东东? 民生银行中报浅析——高速增长的民生银行瑕不掩瑜来源:搜狐博客 作者: 道听途说 大致从头看了一遍民生银行半年报,就我个人来说是较为满意
转自:http://blog.sina.com.cn/s/blog_4adc4b090101kvek.html首先解释面上意思,service是业务层,dao是数据访问层。呵呵,这个问题我曾经也有过,记得以前刚学编程的时候,都是在service里直接调用dao,service里面就new一个dao类对象,调用,其他有意义的事没做,也不明白有这个有什么用,参加工作久了以后就会知道,业务才
项目地址:https://github.com/Laity000/SmartBed-Workerman-AngularJS在线演示(手机端登录虚拟设备admin1):部分功能展示:通过二维码绑定设备:控制设备并实时反馈:查询设备历史数据:写在前面最近开发了一款关于物联网项目的后端管理平台,可以实现对设备的管理,包括设备的连接、区分,状态反馈...
oracle数据库中有个db_block_size,这个参数是数据库读取数据和存储数据的一个单位。一般默认为8k,这个参数一般是在安装oracle的时候指定,不能修改。为了让数据库里能够有其他的大小的数据库,oracle引进...
Centos7下部署k8s集群1.环境准备角色/主机名ipk8s-master192.168.132.155k8s-node1192.168.132.1562.基础设置2.1 关闭防火墙(master/node操作)systemctl stop firewalld && systemctl disable firewalld2.2 关闭selinux(master/node操作)setenforce 0 && sed -i
转自:http://blog.csdn.net/coder80/article/details/7879259和 http://blog.csdn.net/coder80/article/details/7881406感谢原作者。==========================================================================...
开头技术的发展产生了程序员这个职位,从这些年各大互联网公司曝光的一些员工收入水平来看,程序员的工资还是相对比较高的,可是我们在互联网上还听到了另外一种声音,很多程序员想转行,特别是大龄程序员,这可能会令很多人纳闷。为什么工资这么高还想转行呢?其实他们也很无奈,从下面几点可以看得出来。面试题PS:由于文章篇幅问题,只以图片形式展示本次面过程我把他整理成了一份2124页的PDF(包含本次面试及解析,按系统知识分类)一面二面三面答案整理经验总结有的面试官不让你做自我介绍,上来直接
1.下载jsapi SDK 放在vendor目录在WxPayConfig.php 配置参数 const APPID = '**********************'; //公众号appid const MCHID = '**********************'; //商户id const KEY = '**********************...