Python +openCv 实现BGR2HSI和HSI2BGR
来源:互联网 发布:mac安装win10重启黑屏 编辑:程序博客网 时间:2024/06/06 06:57
关于转换原理参照http://blog.sina.com.cn/s/blog_6c41e2f30100xusj.html
import cv2import numpy as npimg=cv2.imread('C:/Users/53121/Desktop/IMAGE/road.jpg')#BGR转HSI,得到的HSI三通道取值范围都在0到1之间 def BGR2HSI(bgr_img): bgr=bgr_img.copy() B,G,R=cv2.split(bgr/255.0) hsi_img=bgr.copy()/255.0 H,S,I=cv2.split(hsi_img) h,w=B.shape for i in range(h): for j in range(w): bgr_min=min(B[i,j],G[i,j],R[i,j]) bgr_sum=B[i,j]+G[i,j]+R[i,j] I[i,j]=bgr_sum/3 S[i,j]=1-3*bgr_min/bgr_sum cov=(R[i,j]-G[i,j])+(R[i,j]-B[i,j]) var=2*np.sqrt((R[i,j]-G[i,j])**2+(R[i,j]-B[i,j])*(G[i,j]-B[i,j])**2) theta=np.arccos(cov/var) if G[i,j]>=B[i,j]: H[i,j]=theta/(2*np.pi) else: H[i,j]=(2*np.pi-theta)/(2*np.pi) hsi_img[:,:,0]=H hsi_img[:,:,1]=S hsi_img[:,:,2]=I return hsi_img#HSI转BGR,得到的BGR三通道取值范围都在0到1之间 def HSI2BGR(hsi_img): hsi=hsi_img.copy() H,S,I=cv2.split(hsi) bgr_img=hsi_img.copy() B,G,R=cv2.split(bgr_img) h,w=B.shape for i in range(h): for j in range(w): if S[i,j]<1e-6: R[i,j]=I[i,j] G[i,j]=I[i,j] B[i,j]=I[i,j] else: H[i,j]*=360 if H[i,j]>0 and H[i,j]<=120: B[i,j]=(1-S[i,j])*I[i,j] sigma=(H[i,j]-60)*np.pi/180 temp=np.tan(sigma)/np.sqrt(3) G[i,j]=(1.5+1.5*temp)*I[i,j]-(0.5+1.5*temp)*B[i,j] R[i,j]=3*I[i,j]-G[i,j]-B[i,j] elif H[i,j]>120 and H[i,j]<=240: R[i,j]=(1-S[i,j])*I[i,j] sigma=(H[i,j]-180)*np.pi/180 temp=np.tan(sigma)/np.sqrt(3) B[i,j]=(1.5+1.5*temp)*I[i,j]-(0.5+1.5*temp)*R[i,j] G[i,j]=3*I[i,j]-R[i,j]-B[i,j] elif H[i,j]>240 and H[i,j]<=360: G[i,j]=(1-S[i,j])*I[i,j] sigma=(H[i,j]-300)*np.pi/180 temp=np.tan(sigma)/np.sqrt(3) R[i,j]=(1.5+1.5*temp)*I[i,j]-(0.5+1.5*temp)*G[i,j] B[i,j]=3*I[i,j]-G[i,j]-R[i,j] bgr_img[:,:,0]=B bgr_img[:,:,1]=G bgr_img[:,:,2]=R return bgr_imghsi=BRG2HSI(img)bgr=HSI2BGR(hsi)
阅读全文
0 0
- Python +openCv 实现BGR2HSI和HSI2BGR
- 用Python和OpenCV实现RootSIFT--Implementing RootSIFT in Python and OpenCV
- OPENCV运动追踪研究和PYTHON及JAVA实现
- python + openCV 实现图像轮廓识别和面积计算
- python+opencv实现阈值分割
- opencv-python实现水平投影
- python+opencv实现人头检测
- Python + opencv 实现图片马赛克
- python+opencv 车牌识别实现
- python opencv 实现开闭运算
- cubieboard4 安装Python和OpenCV
- Python和OpenCV环境配置
- Python和opencv打开摄像头
- Python和opencv打开摄像头
- 感知哈希(pHash)和梯度哈希(dHash)的Python+OpenCV+SciPy实现
- 用树莓派 + Python + OpenCV 实现家庭监控和移动目标探测(下)
- 基于车牌颜色(仅限蓝色和黄色)的车牌定位(python+opencv实现)
- 基于OpenCV的人脸检测——C++和Python实现
- 7-39 龟兔赛跑(C语言数学法)
- CentOS7 安装MySQL5.7
- Codeforces 560 E. Gerald and Giant Chess (dp,组合数学)
- using namespace std
- win10安装解压版mysql
- Python +openCv 实现BGR2HSI和HSI2BGR
- SELinux策略语言–客体类别和许可
- 12-2-python细碎概念
- Linux下基于Eclipse搭建STM32开发环境
- 简单的Javaweb登录注册
- SAP 消息控制
- jenkins 服务(分布式master+slave) 搭建
- 深度学习框架TensorFlow学习与应用(六)——卷积神经网络应用于MNIST数据集分类
- HDU3308LCIS(线段树区间合并)