使用OpenCV和Python计算图像的“彩色度”
生活随笔
收集整理的這篇文章主要介紹了
使用OpenCV和Python计算图像的“彩色度”
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用OpenCV和Python計算圖像“彩色度”
- 1. 效果圖
- 2. 炫彩度量方法是什么?
- 3. 源代碼
- 參考
你是否嘗試過計算每個圖像的炫彩值,并根據炫彩值對自己的圖像數據集進行排序!有可能會有意外的驚喜哦~
圖像彩色有許多實用的用途,包括評估壓縮算法,評估給定的相機傳感器模塊對顏色的敏感性,計算圖像的“美學質量”,或者簡單地創建批量圖像的可視化以豐富多彩的順序排列。
這篇博客將介紹如何使用Python,OpenCV計算圖像的豐富度,測量自然圖像的豐富多彩。然后使用OpenCV和Python實現炫彩度量的仿佛,并對一組圖像進行炫彩度計算,并根據炫彩度量值排序選出最炫彩的25張圖像,以及最不炫彩的25張圖像。
1. 效果圖
最炫彩的25圖像,效果圖如下(基本都是水果及美食圖~)
最不炫彩的25圖像,效果圖如下(基本都是月亮圖以及朦朧的張家界山頂,和看書的拍照筆記)
2. 炫彩度量方法是什么?
每張圖像都是RGB三通道的彩色圖,根據如下公式計算炫彩度量值;
3. 源代碼
# USAGE
# python colorfulness.py --images E:\personal\images# 導入必要的包
from imutils import build_montages
from imutils import paths
import numpy as np
import argparse
import imutils
import cv2# 圖像彩色度計算方法
def image_colorfulness(image):# 分離照片為三通道RGB值(B, G, R) = cv2.split(image.astype("float"))# 計算 rg = R - G 紅綠對手顏色空間rg = np.absolute(R - G)# 計算 yb = 0.5 * (R + G) - B 黃藍對手顏色空間yb = np.absolute(0.5 * (R + G) - B)# 計算`rg` and `yb` 的標準方差和均值(rgMean, rgStd) = (np.mean(rg), np.std(rg))(ybMean, ybStd) = (np.mean(yb), np.std(yb))# 將標準方差和均值合并stdRoot = np.sqrt((rgStd ** 2) + (ybStd ** 2))meanRoot = np.sqrt((rgMean ** 2) + (ybMean ** 2))# 獲得圖像彩色度量值,并返回return stdRoot + (0.3 * meanRoot)# 構建命令行參數,并解析
# --image 輸入圖片文件夾路徑
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--images", required=True,help="path to input directory of images")
args = vars(ap.parse_args())# 初始化結果list
print("[INFO] computing colorfulness metric for dataset...")
# 通常情況下存儲圖像id:圖像炫彩度量值,在這里介于圖像數據量小且為了后續展示方便,存儲圖像:圖像炫彩度量值
results = []# 遍歷圖片路徑
for imagePath in paths.list_images(args["images"]):# 加載圖像,保持寬高比的縮放以加快處理速度,計算圖像彩色度度量image = cv2.imread(imagePath)image = imutils.resize(image, width=250)C = image_colorfulness(image)# 顯示圖像的彩色度分數cv2.putText(image, "{:.2f}".format(C), (40, 40),cv2.FONT_HERSHEY_SIMPLEX, 1.4, (0, 255, 0), 3)# 添加圖像的炫彩度量到結果listresults.append((image, C))# 對結果進行排序最炫彩圖像靠前;
# 選出最炫彩、最不炫彩的25個圖像
print("[INFO] displaying results...")
results = sorted(results, key=lambda x: x[1], reverse=True)
mostColor = [r[0] for r in results[:25]]
leastColor = [r[0] for r in results[-25:]][::-1]# 構建倆組圖像的蒙太奇效果
mostColorMontage = build_montages(mostColor, (128, 128), (5, 5))
leastColorMontage = build_montages(leastColor, (128, 128), (5, 5))# 顯示圖像結果
cv2.imshow("Most Colorful", mostColorMontage[0])
cv2.imshow("Least Colorful", leastColorMontage[0])
cv2.waitKey(0)
# cv2.destroyAllWindows()
參考
- https://www.pyimagesearch.com/2017/06/05/computing-image-colorfulness-with-opencv-and-python/
總結
以上是生活随笔為你收集整理的使用OpenCV和Python计算图像的“彩色度”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Python和OpenCV进行文本偏
- 下一篇: 使用OpenCV和Imutils构建图像