2021-07-05
最近学习PS中图像如何进行色度处理的,并参考网上很多大侠的文章,将其图像处理过程整理一下,其运行环境为PYTHON, OPENCV, NUMPY:
一般情况由于视频输出为YUV图像
第一步:YUV RGB转换
import cv2
import numpy as np
import matplotlib.pyplot as plt# 图像转换使用OPENCV的库完成,使用NP从文件加载单张YUV图片,如果是YUV视频文件,需要调整文件阅读的偏移量。def yuv_import(filename, width, height):size = width * height;yuv = np.fromfile(filename, dtype='uint8')img = yuv.reshape((height * 3 // 2, width)).astype('uint8')src11 = cv2.cvtColor(img, cv2.COLOR_YUV2BGR_I420)cv2.imshow('input_image1', src11)cv2.waitKey(0)
第二步:由于摄像头的光照问题,先去图像的暗角,参考如下博客
图像增强系列之图像自动去暗角算法。 - Imageshop - 博客园 (cnblogs.com)
第三步: 对图像进行色度调整,增强图像效果
def WhiiteBlack(img, Shadow, Highlight, Midtones):if Highlight > 255:Highlight = 255if Shadow < 0:Shadow = 0if Shadow >= Highlight:Shadow = Highlight - 2if Midtones > 3.0:Midtones = 3.0if Midtones < 0.3:Midtones = 0.3maptable = np.arange(256)maptable = np.array(maptable, dtype=int)Diff = Highlight - Shadowexponent = 1.0 / Midtones;coe = 255.0 / DiffrgbDiff = (maptable - Shadow) * coergbDiff = np.maximum(rgbDiff, 0)rgbDiff = np.minimum(rgbDiff, 255)rgbDiff = rgbDiff / 255.0rgbDiff = np.power(rgbDiff, exponent) * 255.0 + 0.5rgbDiff = np.around(rgbDiff, 0)rgbDiff = rgbDiff.astype('uint8')result = cv2.LUT(img, rgbDiff)cv2.imshow('input_image1', result)cv2.waitKey(0)return result
第四步:图像颜色空间的调整,用于图像拼接
使用OPENCV中的cvtColor函数,转变RGB为LAB
cv::cuda::cvtColor(gpuSrcImage, gpuDstImage, cv::COLOR_BGR2Lab);
第五步:图像颜色区域的均值与标准差
对于标准RECT区域可以使用opencv::meanStdDev来计算,对于非RECT图像,需要编写CUDA KERNEL来计算,对于实时行不高的场景,可以将图像数据拷贝到内存,运用CPU进行计算
第六步:为图像拼接进行LAB数据修正
其原理是运用一张图像的均值与标准差与另外一张图像均值与标准差进行图像亮度与色度修正。
(Val - meanR)*(stdL) / (stdR) + meanL (- Diff) 关于DIFF的值修正可以使用对数函数进行微调;
2021-07-05相关推荐
- 【Doris Weekly FAQ】2021.07.05~2021.07.18
观众朋友们: 晚上好! 欢迎收看[ Doris 近日要闻]~本次为您带来的是 2021年07月15日 - 2021年07月18日 的双周总结. Doris 社区周报每期会包含 FAQ 环节.我们会在社 ...
- 使用Go开发的数字书架应用 | Gopher Daily (2021.07.05) ʕ◔ϖ◔ʔ
每日一谚:API consumers: if it is not part of the contract, don't depend on it. Go技术生态 Myreads:一个使用Go.Rea ...
- 2021/07/05 基于dev,新建一个分支
首先切换到dev分支上,拉最新代码:git checkout dev/git pull 从已有分支上,创建一个自己需要的分支(如:taip):git checkout -b taip 创建完可以查看一 ...
- Doris Weekly FAQ】2021.07.19~2021.08.01
观众朋友们: 晚上好! 欢迎收看[ Doris 近日要闻]~本次为您带来的是 2021年07月19日 - 2021年08月01日 的双周总结. Doris 社区周报每期会包含 FAQ 环节.我们会在社 ...
- GMOJ - 2021.07.20【普及组】模拟赛C组 - 排座椅(seat)、传球游戏(ball)、立体图(drawing)、间谍派遣、seek
文章目录 luogu博客链接 GMOJ - 2021.07.20[普及组]模拟赛C组 - 排座椅(seat).传球游戏(ball).立体图(drawing).间谍派遣.seek T1 排座椅(seat ...
- 专线数据维护07/05
今天就去了两个地方: 1.长生平价超市基站 2.东部水务技术开发有限公司. (长生平价基站-长生桥社保所) 对ping测试 192.168.0.8<---->192.168.0.10 服务 ...
- 哔哩哔哩“2021.07.13 我们是这样崩的”报告的学习-1
哔哩哔哩"2021.07.13 我们是这样崩的"报告的学习-1 这份报告是我学计算机两年来第一次真实看到大厂的员工到底在干什么.出现了很多专有名词,以及当前最先进的互联网企业的应用 ...
- 2021.07.22禾赛提前批一面面经
2021.07.22禾赛提前批一面面经 1.LUTRAM的意思 2.LUTRAM和block RAM的区别 3.时序约束和时序优化 4.跨时钟域 5.为什么不能多bit采用同步寄存器打两拍(就这个问题 ...
- 2021.07.07 宇信科技
2021.07.07 宇信科技 宇信科技 晚上电话面 问了一堆java基础,离谱,jd上也没要求java:简历筛选扣工资! java小白,凭借c语言基础简单回答了一哈,面试官估计在电 ...
- 第十弹:网络公开课,免费学习资源,2020.07.05更新
第十弹:网络公开课,免费学习资源,2020.07.05更新 按照个人兴趣整理的网络公开课资源导航网址:http://www.trochilidaetechnology.com/ 以下为[网络公开课]领 ...
最新文章
- 不忘历史才能开辟未来,善于继承才能善于创新
- Material Design控件使用学习 TabLayout+SwipeRefreshlayout
- TCPView for Windows
- C# 框架是什么?MVC是什么 ?工厂模式是什么?设计模式是什么?三层架构是什...
- hdu 3681(bfs+dfs+状态压缩)
- Connection对象 Statement对象 ResultSet对象
- Linux用户资源限制-ulimit
- camera(21)---MTK android AF调试总结
- SAP-BW数据仓库增量更新
- Matlab Tricks(二十四)—— 将一副图像逆时针旋转 180°
- 2020强网杯青少赛Pursuing_The_Wind战队WRITEUP
- matlab怎么算方差和标准差,matlab怎么求矩阵的均值和标准差 看完你就知道了
- java 按照拼音排序_java List中元素按照拼音排序
- Java-基于SSM的健身后台管理系统
- 达观数据中标大华智能搜索平台,助力企业打造知识共享系统
- SIMCom芯片关于GPS定位信息的的解析(AT+CGNSINF)
- 制作Win10系统安装U盘,安装纯净版Win10的通用教程
- 层次模型,网状模型,关系模型
- 不要带着这些思维去职场工作
- 企业开发的困境与变局