OpenCV | 您所在的位置:网站首页 › 直方图的类型有哪些图片和名称 › OpenCV |
文章目录
一、图像分类的过程二、开发环境:(安装)OpenCV 计算机视觉库三、颜色空间(颜色模型:RGB,HSV,Lab)3.1 opencv--HSV颜色空间
四、OpenCV处理图片4.1 直接读取图片4.2 读取图片并简单处理—图像特征:颜色直方图颜色空间 RGB--HSV--Lab灰度图与其颜色直方图带蒙版的颜色直方图多个颜色直方图按多个通道计算颜色直方图
开发环境 jupyter notebook
一、图像分类的过程
图片必须经过标注 图片的类别为有限的集合,如{猫、狗、牛、马、狼} 每个类别的图片数量接近,如果不同类别图片的数量差异很大,训练出来的分类器容易倾向于图片数量多的类别 划分训练/测试集 在训练之前,要把数据集划分为训练集(学习分类器)和测试集(对分类器进行评估) 训练集和测试集相互独立,不重合! 特征表示 :对图片进行数值处理,转换成计算机可理解的特征,常用特征: 颜色直方图(Color Histograms) 方向梯度直方图(Histogram of Oriented Gradients,HOG) 局部二值模式(Local Binary Pattern,LBP) 分类算法 :一般分类算法即可:逻辑回归,支持向量机(SVM),随机森林 模型评估 : 混淆矩阵(Confusion Matrix) 精确度(Precision) 召回率(Recall) F1值(F1 score) recall与Precision的调和均值 二、开发环境:(安装)OpenCV 计算机视觉库 安装: 方法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.whl pip install opencv_python-3.2.0-cp35-cp35m-win_amd64.whl opencv 的导入: import cv2 cv2.__version__ OpenCV的使用 在线文档:http://docs.opencv.org/2.4.11/ 三、颜色空间(颜色模型:RGB,HSV,Lab) RGB颜色空间有:RGB :模型容易理解,连续变换颜色时不直观 (红red 绿green 蓝blue)三原色:取值范围都是:[0,255],[0,255],[0,255] HSV 是为了数字化图像提出来了,不能很好的表示人眼解释图像过程H (Hue)色相:[0,360] S (Saturation)饱和度,即色彩纯净度,0饱和度为白色 V (Value/Brightness):明度 0明度为纯黑色 在OpenCV中,颜色范围: H = [0,179] S = [0,255] V = [0,255] Lab:颜色之间的欧式距离有具体含义–距离越大,人眼感官两种颜色差距越远L 通道:像素亮度,上白下黑 中间灰 a 通道:左绿 右红 b 通道:一端纯蓝,一端纯黄 灰度图:每个像素[0,255]根据人眼敏感度,把RGB图片转换为灰度图,不是简单把RGB每个通道取平均值 而是:Y = 0.299*R + 0.587*G + 0.114*B HSV(hue,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V=1. 它包含RGB模型中的R=1,G=1,B=1 三个面,所代表的颜色较亮。 色彩H由绕V轴的旋转角给定。红色对应于 角度0° ,绿色对应于角度120°,蓝色对应于角度240°。 在HSV颜色模型中,每一种颜色和它的补色相差180° 。 饱和度S取值从0到1,所以圆锥顶面的半径为1。 在圆锥的顶点(即原点)处,V=0,H和S无定义, 代表黑色。 圆锥的顶面中心处S=0,V=1,H无定义,代表白色。 从该点到原点代表亮度渐暗的灰色,即具有不同 灰度的灰色。 对于这些点,S=0,H的值无定义。可以说,HSV模型中的V轴对应于RGB颜色空间中的主对角线。 在圆锥顶面的圆周上的颜色,V=1,S=1,这种颜色是纯色。 HSV颜色空间它锥形的钻换模型中可以理解到: hue 通道的取值范围就应该是 0-360度,单数在opencv中其取值范围 [0,180]。 OpenCV-Python中调用的直方图计算函数为cv2.calcHist。 """ 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 plt def 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 histImg if __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()RGB颜色空间 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()
关于直方图均衡详情 请点击 # 把一个像素的多个通道合在一起看作一个值 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] |
CopyRight 2018-2019 实验室设备网 版权所有 |