直方图规定化python+opencv实现
import os
import cv2
import numpy as npdef calcHist(mat):#统计元素个数mat = np.array(mat)hist = []for i in range(256):hist.append(len(mat[mat==i]))return histdef get_map(Hist):# 计算概率分布PrHist = np.array(Hist)sum_Hist = sum(Hist)Pr = Hist / sum_Hist# 计算累计概率SkSk = []temp_sum = 0for n in Pr:temp_sum = temp_sum + nSk.append(temp_sum)Sk = np.array(Sk)return Sk# 得到图片像素的概率分布
def get_infer_map(infer_img):infer_Hist = calcHist(infer_img)infer_map = get_map(infer_Hist)return infer_map# 根据两张图的概率分布计算像素值映射关系
def get_finalmap(infer_map,img_map):final_map = [] # 原图像素点映射到目标图的mapindex = 0for i in range(len(img_map)):# 防止像素值超过255if index == 255:final_map.append(255)continue# 将像素值依据自身概率分布映射到目标图片的概率分布上if infer_map[index] > img_map[i]:final_map.append(index)else:while(infer_map[index] <= img_map[i]):index += 1# 防止像素值超过255if index == 255:breakfinal_map.append(index)return final_mapdef get_new_img(img, infer_map):new_img = img.copy()img_map = get_infer_map(img)final_map = get_finalmap(infer_map,img_map)# 将像素点的值进行映射# w, h = img.shape# for i in range(w):# for j in range(h):# temp = img[i, j]# new_img[i, j] = final_map[temp]# 快速的计算方法for i in range(256):new_img[img==i] = final_map[i]return new_imgif __name__ == "__main__":dstroot = './imgs' # 要进行直方图匹配的图像infer_img_path = './base.jpg' # 基准图像infer_img = cv2.imread(infer_img_path,0)outroot = './out3' # 输出结果图os.makedirs(outroot,exist_ok=True)infer_map = get_infer_map(infer_img) # 计算参考映射关系dstlist = os.listdir(dstroot)for img in dstlist:img_path = os.path.join(dstroot, img)print(img_path)img_org = cv2.imread(img_path,0)new_img = get_new_img(img_org, infer_map) # 根据映射关系获得新的图像new_path = os.path.join(outroot, img)cv2.imwrite(new_path, new_img)
直方图规定化python+opencv实现相关推荐
- python opencv直方图_【python opencv】直方图均衡
搜索热词 考虑这样一个图像,它的像素值仅局限于某个特定的值范围.例如,较亮的图像将把所有像素限制在高值上.但是一幅好的图像会有来自图像所有区域的像素.因此,您需要将这个直方图拉伸到两端(如下图所示,来 ...
- python+opencv图像处理之七:直方图均衡化
python+opencv图像处理之七:直方图均衡化 目录 python+opencv图像处理之七:直方图均衡化 一.直方图均衡化 二.直方图绘制 三.直方图均衡化 四.有限对比适应性直方图均衡化 一 ...
- Python+OpenCV图像处理(五)——图像阈值和二值化
系列文章 Python+OpenCV图像处理(一)--OpenCV框架与图像插值算法 Python+OpenCV图像处理(二)--几何变换 Python+OpenCV图像处理(三)--彩色空间互换 P ...
- Python+Opencv图像处理新手入门教程(三):阈值与二值化
一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图 1.Intro 今天这节我们主要研究利用阈值处理图像.例如对于输入图像: 如何做一 ...
- python opencv二值化图像_python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘...
python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘 python opencv 1,读取图像 2,图像变矩阵 3,图像转灰度图像 4,彩色图像是3D数组 5,灰度图像是2 ...
- python做直方图-python OpenCV学习笔记实现二维直方图
本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...
- 在OpenCV下写的直方图匹配(直方图规定化)C++源码!
直方图匹配的原理就不多作解释了,我曾经还将MATLAB源码改写成过C源码,详情可见我的博文 根据MATLAB的histeq函数改写的运行在OpenCV下的直方图规定化C源码! 本文已转移到 https ...
- 根据MATLAB的histeq函数改写的运行在OpenCV下的直方图规定化C源码
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 2016-6-8日用C++也实现了直方图规定化, ...
- opencv python 直方图反向投影_python OpenCV学习笔记直方图反向投影的实现
本文介绍了python OpenCV学习笔记直方图反向投影的实现,分享给大家,具体如下: 它用于图像分割或寻找图像中感兴趣的对象.简单地说,它创建一个与我们的输入图像相同大小(但单通道)的图像,其中每 ...
- 用python怎么样实现图像二值化_使用Python+OpenCV如何实现图像二值化
使用Python+OpenCV如何实现图像二值化 发布时间:2020-10-26 14:15:52 来源:亿速云 阅读:77 作者:蛋片鸡 这篇文章运用简单易懂的例子给大家介绍使用Python+Ope ...
最新文章
- [置顶] 安卓高手之路之 WindowManager
- 优秀设计师必备:视觉传达设计与视觉思维
- 用C语言做的 一个整人的小程序
- GDB调试程序系列 (3)
- linux deliver分发管理,Erlang/Elixir: 使用 Edeliver 进行自动化的持续部署
- [蓝桥杯][算法提高VIP]打水问题(贪心)
- Android内存泄漏检测利器:LeakCanary
- Java 1.2.2 格式化输出
- Android图片爬虫,看妹纸神器项目源码,ListView单张图片查看
- 为什么总说程序员是吃青春饭的? 32岁程序员直接被面试官送走?
- 1.定义一个基类 Base,有两个公有成员函数fn1( ),fn2 ( )。 私有派生出Derived类,如何通过Derived 类的对象调用基类的函数fnl() ?
- MySQL【部署 04】8.0.25离线部署(下载+安装+配置)Failed dependencies 问题处理及8.0配置参数说明
- TRIE树在输入法分词的应用
- 在UC浏览器投放广告的优势、效果!
- python爬取凤凰新闻网_爬取网易,搜狐,凤凰和澎湃网站评论数据,正负面情感分析...
- Unity中AssetBundle打包文件大致解读
- 2019校招面经大汇总
- 项目管理进阶--软件开发项目中的团队组成
- 单例模式(Python中的单例类)
- 抓取网页中的Silverlight数据初探