opencv圖片處理(三):得到圖片的灰度圖和直方圖
阿新 • • 發佈:2018-12-06
1.得到直方圖和灰度圖
# -*- coding: utf-8 -*- # !/usr/bin/env python # @Time : 2018/11/19 15:56 # @Author : xhh # @Desc : 得到灰度圖以及直方圖 # @File : opencv_grayimg_hist.py # @Software: PyCharm import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('../tupian/green.png') cv2.imshow('img', img) # 2*g-r-b分離土壤與綠色植物 # 轉化為浮點數進行計算 fimg = np.array(img, dtype=np.float32)/255 (b, g, r) = cv2.split(fimg) gray_img = 2*g - r -b # 求取最大值和最小值 (minVal, maxVal, minLoc, macLoc) = cv2.minMaxLoc(gray_img) # 計算直方圖 hist = cv2.calcHist([gray_img],[0],None,[255],[minVal, maxVal]) # 展示直方圖 plt.plot(hist) plt.show() cv2.waitKey(0)
先利用2*g-r-b得到灰度圖,之後得到2*g-r-b的直方圖
2.轉化為二值圖
# 轉換為u8型別,進行otsu二值化
gray_u8 = np.array((gray_img - minVal) / (maxVal - minVal) * 255, dtype=np.uint8)
(thresh, bin_img) = cv2.threshold(gray_u8, -1.0, 255, cv2.THRESH_OTSU)
cv2.imshow('bin_img', bin_img)
轉換為二值圖,結果有點尷尬,可能是圖片的原因
3. 得到彩色影象
# -*- coding: utf-8 -*- # !/usr/bin/env python # @Time : 2018/11/19 15:56 # @Author : xhh # @Desc : 得到灰度圖以及直方圖 # @File : opencv_grayimg_hist.py # @Software: PyCharm import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('../tupian/green.png') # img = cv2.imread('../dataset/100201.png') # cv2.imshow('img', img) # 2*g-r-b分離土壤與綠色植物 # 轉化為浮點數進行計算 fimg = np.array(img, dtype=np.float32)/255 (b, g, r) = cv2.split(fimg) gray_img = 2*g - r -b # 求取最大值和最小值 (minVal, maxVal, minLoc, macLoc) = cv2.minMaxLoc(gray_img) # 計算直方圖 hist = cv2.calcHist([gray_img],[0],None,[255],[minVal, maxVal]) # 展示直方圖 # plt.plot(hist) # plt.show() # 轉換為u8型別,進行otsu二值化 gray_u8 = np.array((gray_img - minVal) / (maxVal - minVal) * 255, dtype=np.uint8) (thresh, bin_img) = cv2.threshold(gray_u8, -1.0, 255, cv2.THRESH_OTSU) # cv2.imshow('bin_img', bin_img) # 得到彩色的影象 (b8, g8, r8) = cv2.split(img) color_img = cv2.merge([b8 & bin_img, g8 & bin_img, r8 & bin_img]) cv2.imshow('color_img',color_img) cv2.waitKey(0)