1. 程式人生 > >opencv圖片處理(三):得到圖片的灰度圖和直方圖

opencv圖片處理(三):得到圖片的灰度圖和直方圖

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)