看到这篇博文,受益匪浅,留存在此,没别的意思,各位还是回原博收藏点赞的好,免得引起不必要的争议。


安装:
方法1:conda install -c menpo opencv
方法2:conda install --channel https://conda.anaconda.org/menpo opencv3
方法3:pip/conda install opencv-python
方法4:使用 whl 文件进行安装,进入网站 http://www.lfd.uci.edu/~gohlke/pythonlibs/。 下载与当前环境兼容的 opencv 文件。切换到该文件所在的目录,在命令行环境下使用 例如:安装文件:opencv_python-3.2.0-cp35-cp35m-win_amd64.whlpip install opencv_python-3.2.0-cp35-cp35m-win_amd64.whlopencv 的导入:
import cv2
cv2.__version__OpenCV的使用在线文档:http://docs.opencv.org/2.4.11/






import cv2                      #导入 Opencv
import os
import numpy as np
import matplotlib.pyplot as pltoutput_dir = 'output2'            #设置输出文件夹,若不存在则创建
if not os.path.exists(output_dir):os.mkdir(output_dir)  img_file = './../image.png'     #读取图片
img = cv2.imread(img_file)type(img)                       #读入图片后得到ndarray 对象
img.shape                       #ndarray的三个维度分别是图片的:高,宽,通道# pyplot.imgshow 在显示图片时是按照RGB通道顺序显示,cv2则相反
# 需要通过 np.flip(img,axis = 2) 调整3个通道的顺序(若不调整图片颜色失真)
plt.imshow(np.flip(img,axis = 2))
plt.axis('off')
plt.show()                      #图1plt.imshow(img)
plt.axis('off')                 #不显示坐标
plt.show()                      #图2#输出并保存图片
output_image = os.path.join(output_dir,'image.png')
cv2.imwrite(output_image,img)

"""
hist = cv2.calcHist([image],             # 传入图像(列表)[0],                 # 使用的通道(使用通道:可选[0],[1],[2])None,                # 没有使用mask(蒙版)[256],               # HistSize[0.0,255.0])         # 直方图柱的范围# return->list
"""import cv2
import numpy as np
import matplotlib.pyplot as pltdef calcAndDrawHist(image, color):  hist= cv2.calcHist([image], [0], None, [256], [0.0,255.0])  minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(hist)  histImg = np.zeros([256,256,3], np.uint8)  hpt = int(0.9* 256);  for h in range(256):  intensity = int(hist[h]*hpt/maxVal)  cv2.line(histImg,(h,256), (h,256-intensity), color)  return histImgif __name__ == '__main__':  original_img = cv2.imread("666.png")img = cv2.resize(original_img,None,fx=0.6,fy=0.6,interpolation = cv2.INTER_CUBIC)b, g, r = cv2.split(img)  histImgB = calcAndDrawHist(b, [255, 0, 0])  histImgG = calcAndDrawHist(g, [0, 255, 0])  histImgR = calcAndDrawHist(r, [0, 0, 255])  cv2.imshow("histImgB", histImgB)  cv2.imshow("histImgG", histImgG)  cv2.imshow("histImgR", histImgR)  cv2.imshow("Img", img)  cv2.waitKey(0)  cv2.destroyAllWindows() 

import cv2
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline pic_file = '../data/images/image_crocus_0003.png'img_bgr = cv2.imread(pic_file, cv2.IMREAD_COLOR) #OpenCV读取颜色顺序:BRG
img_b = img_bgr[..., 0]
img_g = img_bgr[..., 1]
img_r = img_bgr[..., 2]
fig = plt.gcf()                                  #图片详细信息fig = plt.gcf()                                  #分通道显示图片
fig.set_size_inches(10, 15)plt.subplot(221)
plt.imshow(np.flip(img_bgr, axis=2))             #展平图像数组并显示
plt.axis('off')
plt.title('Image')plt.subplot(222)
plt.imshow(img_r, cmap='gray')
plt.axis('off')
plt.title('R')plt.subplot(223)
plt.imshow(img_g, cmap='gray')
plt.axis('off')
plt.title('G')plt.subplot(224)
plt.imshow(img_b, cmap='gray')
plt.axis('off')
plt.title('B')plt.show()

img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)
img_h = img_hsv[..., 0]
img_s = img_hsv[..., 1]
img_v = img_hsv[..., 2]fig = plt.gcf()                      # 分通道显示图片
fig.set_size_inches(10, 15)plt.subplot(221)
plt.imshow(img_hsv)
plt.axis('off')
plt.title('HSV')plt.subplot(222)
plt.imshow(img_h, cmap='gray')
plt.axis('off')
plt.title('H')plt.subplot(223)
plt.imshow(img_s, cmap='gray')
plt.axis('off')
plt.title('S')plt.subplot(224)
plt.imshow(img_v, cmap='gray')
plt.axis('off')
plt.title('V')plt.show()

img_lab = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2LAB)
img_ls = img_lab[..., 0]
img_as = img_lab[..., 1]
img_bs = img_lab[..., 2] # 分通道显示图片
fig = plt.gcf()
fig.set_size_inches(10, 15)plt.subplot(221)
plt.imshow(img_lab)
plt.axis('off')
plt.title('L*a*b*')plt.subplot(222)
plt.imshow(img_ls, cmap='gray')
plt.axis('off')
plt.title('L*')plt.subplot(223)
plt.imshow(img_as, cmap='gray')
plt.axis('off')
plt.title('a*')plt.subplot(224)
plt.imshow(img_bs, cmap='gray')
plt.axis('off')
plt.title('b*')plt.show()  

img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)
fig = plt.gcf()
fig.set_size_inches(5, 7.5)plt.imshow(img_gray, cmap='gray')
plt.axis('off')
plt.title('Gray')
plt.show()
"""cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) → hist参数说明images:   图片列表channels: 需要计算直方图的通道。[0]表示计算通道0的直方图,[0,1,2]表示计算通道0,1,2所表示颜色的直方图mask:     蒙版,只计算值>0的位置上像素的颜色直方图,取None表示无蒙版histSize: 每个维度上直方图的大小,[8]表示把通道0的颜色取值等分为8份后计算直方图ranges:   每个维度的取值范围,[lower0, upper0, lower1, upper1, ...],lower可以取到,upper无法取到hist:     保存结果的ndarray对象accumulate: 是否累积,如果设置了这个值,hist不会被清零,直方图结果直接累积到hist中
""" img_gray_hist = cv2.calcHist([img_gray], [0], None, [256], [0, 256])plt.plot(img_gray_hist)
plt.title('Grayscale Histogram')
plt.xlabel('Bins')
plt.ylabel('# of Pixels')
plt.show()

# 读取模板
mask_file = '../data/masks/mask_crocus_0003.png'
mask = cv2.imread(mask_file, cv2.IMREAD_UNCHANGED)
help(cv2.calcHist)
img_gray_hist_with_mask = cv2.calcHist([img_gray], [0], mask, [256], [0, 256])
"""图片按位与cv2.bitwise_and(src1, src2[, dst[, mask]]) → dst参数说明src1: 图片1src2: 图片2dst: 保存结果的ndarray对象mask: 蒙版
"""
img_masked = cv2.bitwise_and(img_gray, img_gray, mask=mask)plt.imshow(img_masked, cmap='gray')
plt.axis('off')
plt.title('Image with mask')
plt.show()plt.plot(img_gray_hist_with_mask)
plt.title('Grayscale Histogram')
plt.xlabel('Bins')
plt.ylabel('# of Pixels')plt.show()

# 按R、G、B三个通道分别计算颜色直方图
b_hist = cv2.calcHist([img_bgr], [0], None, [256], [0, 256])
g_hist = cv2.calcHist([img_bgr], [1], None, [256], [0, 256])
r_hist = cv2.calcHist([img_bgr], [2], None, [256], [0, 256])# 显示3个通道的颜色直方图
plt.plot(b_hist, label='B', color='blue')
plt.plot(g_hist, label='G', color='green')
plt.plot(r_hist, label='R', color='red')
plt.legend(loc='best')
plt.xlim([0, 256])
plt.show()# 显示3个通道的颜色直方图
plt.plot(b_hist, label='B', color='blue')
plt.plot(g_hist, label='G', color='green')
plt.plot(r_hist, label='R', color='red')
plt.legend(loc='best')
plt.xlim([0, 256])
plt.show()


关于直方图均衡可以看博主的另一篇文章 上链接点

# 把一个像素的多个通道合在一起看作一个值
hist = cv2.calcHist([img_bgr], [0, 1, 2], None, [8, 8, 8], [0, 256, 0, 256, 0, 256])hist.shape
# 含义:B取值在[0, 32), G取值在[0, 32), R取值在[0, 32)的像素个数
hist[0, 0, 0]

python OpenCV— 颜色空间(RGB,HSV,Lab)与 颜色直方图相关推荐

  1. 颜色空间模型(HSV\LAB\RGB\CMYK)

    通过Photoshop的拾色器,我们知道表征颜色的模型的不止一种,本文将系统并且详细讨论这四种模型(HSV.LAB.RGB和CMYK)之间的联系以及应用. 本文部分章节整合了多位优秀博主的博客(链接见 ...

  2. 色彩空间(RGB, HSV, LAB, YUV)

    RGB颜色空间 RGB(red,green,blue)颜色空间最常用的用途就是显示器系统(计算机.电视机等都是采用RGB颜色空间来进行图像显示).一般来说,电脑,电视机等是利用三个电子枪分别发射R分量 ...

  3. 你真的了解眼里所见的色彩吗?(一文总结RGB/HSV/Lab)

    1 认识色彩 我们DNA里的氮元素,牙齿里的钙元素,血液里的铁元素,吃掉的东西里的碳元素,都是曾经宇宙大爆炸时的万千星辰散落后组成的,所以我们每个人都是星辰.--卡尔萨根 在我们的印象里,星辰都是斑斓 ...

  4. OpenCV 颜色空间RGB 到HSI CMYK的转换 C++

    从RGB 到 HSI 的空间转换 给定一幅RGB彩色格式的图像,每个RGB像素的H分量可用下式得到: 其中 等于 饱和度分量由下式给出: 强度分量下式得出: 上式已假定RGB归一化到[0-1],且角度 ...

  5. python中颜色空间直方图_OpenCV—python 颜色空间(RGB,HSV,Lab)与 颜色直方图

    一.图像分类的过程 image.png 图片必须经过标注 图片的类别为有限的集合,如{猫.狗.牛.马.狼} 每个类别的图片数量接近,如果不同类别图片的数量差异很大,训练出来的分类器容易倾向于图片数量多 ...

  6. RGB与Lab颜色空间互相转换

    RGB与Lab颜色空间互相转换 1.Lab颜色空间 同RGB颜色空间相比(见博客<光与色的故事--颜色空间浅析>),Lab是一种不常用的色彩空间.它是在1931年国际照明委员会(CIE)制 ...

  7. RGB、Lab等颜色空间的区别

    RGB颜色空间 RGB颜色是红色(Red).绿色(Green)和蓝色(Blue)三基色的字母缩写.RGB色彩模式是通过三种基本颜色的不同程度的迭加来产生各种各样的不同颜色.这个标准能够涵盖人类视力所能 ...

  8. RGB与Lab颜色空间互相转换 持续更新中

    RGB与Lab颜色空间互相转换 1.Lab颜色空间 同RGB颜色空间相比(见博客<光与色的故事–颜色空间浅析>),Lab是一种不常用的色彩空间.它是在1931年国际照明委员会(CIE)制定 ...

  9. 从RGB到Lab色彩空间的转换

    最近一直在学习绘制RGB,HSV,Lab色彩空间的直方图,其中也涉及到互相转换的知识,这是网上看到的介绍的. ============================================= ...

最新文章

  1. mlc tlc slc qlc_看了这么多固态硬盘科普,终于真正搞明白TLC闪存和SLC缓存
  2. net.sf.json.JSONObject 和org.json.JSONObject 的差别
  3. (0054)iOS开发之制作静态库详解
  4. ABAP日期操作函数
  5. ssm项目之maven添加pom jar包配置
  6. leetcode 164. 最大间距(桶排序)
  7. img 错误样式css,css设置图片大小_css 控制img图片的大小样式
  8. C++笔记-ClassA a和ClassA a()的区别与联系
  9. 【应用篇】WCF学习笔记(一):Host、Client、MetadataExchage
  10. 在博客中插入emoji表情
  11. python打开指定路径的excel_python使用相对定位,绝对定位,选取同级别文件下的指定文件(csv,excel)...
  12. [转载] python 短网址_使用Python生成url短链接的方法
  13. 七人表决器VHDL代码
  14. android文件地址,Android文件夹在哪
  15. PhotoShop永久序列号
  16. 轻型本地服务器_一小时超轻型漂移机
  17. 人工智能-机器学习-深度学习的区别与联系
  18. 关于office2016卸载后注册表残留无法重新安装问题解决
  19. 查看java进程内存占用情况
  20. 《RAFT:Recurrent All-Pairs Field Transforms for Optical Flow》论文笔记

热门文章

  1. Redis 事务机制深入浅出
  2. c语言中计算long,C语言中int、long int、long long的区别
  3. ASP连接各种数据库的方法
  4. 2008中国软件外包研发竞争力十强企业
  5. 即刻APP 产品分析和一点感悟
  6. html文本框回车符换行符,文本域中换行符的替换示例
  7. 【控制】滑模控制,小例子,有程序有结果图
  8. 解决键盘正常但突然无法打字的问题_艾孜尔江撰
  9. 【sfu】rtc 入口
  10. 通过端口映射访问内网SVN