1. 程式人生 > >opencv: 顏色空間轉換(cv2.cvtColor) 探究(圖示+原始碼)

opencv: 顏色空間轉換(cv2.cvtColor) 探究(圖示+原始碼)

 API Definition

cvtColor

Converts an image from one color space to another.

C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )
Python: cv2.cvtColor(src, code[, dst[, dstCn]]) → dst
C: void cvCvtColor(const CvArr* src, CvArr* dst, int code)
Python

: cv.CvtColor(src, dst, code) → None

Parameters:
src – input image: 8-bit unsigned, 16-bit unsigned ( CV_16UC… ), or single-precision floating-point.
dst – output image of the same size and depth as src.
code – color space conversion code (see the description below).
dstCn – number of channels in the destination image; if the parameter is 0, the number of the channels is derived automatically from src and code.

The function converts an input image from one color space to another. In case of a transformation to-from RGB color space, the order of the channels should be specified explicitly (RGB or BGR). Note that the default color format in OpenCV is often referred to as RGB but it is actually BGR (the bytes are reversed). So the first byte in a standard (24-bit) color image will be an 8-bit Blue component, the second byte will be Green, and the third byte will be Red. The fourth, fifth, and sixth bytes would then be the second pixel (Blue, then Green, then Red), and so on.

引數探究

在探究的過程中,我發現 code 引數的 輸入型別int 型,於是寫程式碼進行驗證:

import cv2
color_types = [cv2.COLOR_BGR2RGB, cv2.COLOR_BGR2GRAY]
for color_type in color_types:
    print ('{}    {}'.format(color_type, type(color_type)))

結果證明了,原來 code 引數的 輸入 不管是cv2.COLOR_BGR2RGBcv2.COLOR_BGR2GRAY,或是其他 顏色轉換空間(color space conversion),均是 int 型的:

4    <type 'int'>
6    <type 'int'>

顏色空間轉換探究

於是我另外編寫了一小段程式碼,探究哪些整數可以作為 cv2.cvtColorcode 引數的 替代輸入值 ,並看看在 轉換了顏色空間 後,會生成什麼樣的影象。

(自己寫的實驗原始碼附在文章末尾)

驗證得知,以下整數可以作為 cv2.cvtColorcode 引數的 替代輸入值

Valid index in cv2.cvtColor:
[0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 44, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 127, 128, 129, 130, 131, 132, 133, 134]

效果圖

原影象

在進行 轉換顏色空間 之前的原圖(./pic/origin_pic.jpg):
這裡寫圖片描述

生成的影象

./generated_pics/1.jpg:
這裡寫圖片描述

./generated_pics/2.jpg:
這裡寫圖片描述

./generated_pics/6.jpg:
這裡寫圖片描述

./generated_pics/32.jpg:
這裡寫圖片描述

./generated_pics/34.jpg:
這裡寫圖片描述

./generated_pics/35.jpg:
這裡寫圖片描述

./generated_pics/36.jpg:
這裡寫圖片描述

./generated_pics/38.jpg:
這裡寫圖片描述

./generated_pics/41.jpg:
這裡寫圖片描述

./generated_pics/53.jpg:
這裡寫圖片描述

./generated_pics/54.jpg:
這裡寫圖片描述

./generated_pics/55.jpg:
這裡寫圖片描述

./generated_pics/69.jpg:
這裡寫圖片描述

./generated_pics/72.jpg:
這裡寫圖片描述

./generated_pics/73.jpg:
這裡寫圖片描述

./generated_pics/79.jpg:
這裡寫圖片描述

./generated_pics/82.jpg:
這裡寫圖片描述

./generated_pics/85.jpg:
這裡寫圖片描述

Code

附上自己寫的實驗程式碼:

# coding=utf-8

origin_pic = './pic/origin_pic.jpg'
save_folder = './generated_pics'

import os
try:
    os.makedirs(save_folder)
except OSError:
    pass

import cv2
img = cv2.imread(origin_pic)
valid_index = []
for color_type in range(-300, 1000, 1):
    try:
        img_new = cv2.cvtColor(img, color_type)
        cv2.imwrite(os.path.join(save_folder, str(color_type)+'.jpg'), img_new)
        valid_index.append(color_type)
    except:
        pass
print ('Valid index in cv2.cvtColor:\n{}'.format(valid_index))

相關推薦

opencv: 顏色空間轉換(cv2.cvtColor) 探究(圖示+原始碼)

 API Definition cvtColor Converts an image from one color space to another. C++: void cvtColor(InputArray src, Outp

Opencv顏色空間轉換、直方圖、Gamma變換

一、顏色空間轉換 cv2.cvtcolor(img,code) code——轉換的標識,從什麼空間轉換到什麼空間,常用的有:cv2.COLOR_BGR2HSV、cv2.COLOR_HSV2BGR、cv2.COLOR_GRAY2BGR、cv2.COLOR_BGR2GRAY

opencv顏色空間轉換函式 cv2.cvtColor()

opencv中有多種色彩空間,包括 RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab8種,使用中經常要遇到色彩空間的轉化,以便生成mask圖等操作。 可以使用下面的

OpenCV顏色空間轉換

1 # coding: utf-8 2 3 ''' 4 第13章主要介紹:顏色空間轉換 5 ''' 6 7 import cv2 8 import numpy as np 9 10 ''' 11 經常用到的顏色空間轉換是: BGR<->Gray 和 BGR<

python-opencv 色彩空間轉換以及找到特定顏色

色彩空間轉換 # Color_conversion img2 = cv.cvtColor(img,cv.COLOR_BGR2HSV) img3 = cv.cvtColor(img,cv.COLOR_BGR2YUV) img4 = cv.cvtColor(img

opencv 10 -- 影象 顏色空間轉換

顏色空間,常見的有三種模式: 灰色圖 BGR HSV 備註:在opencv裡面,BGR,這個順序要注意的,常見的是RGB的稱呼 經常用到的 兩種:BGR↔Gray 和 BGR↔HSV 函式是:cv2.cvtColor(input_image ,fla

opencv基礎筆記(1)影象的讀取、顯示、顏色空間轉換、儲存影象

在做影象處理的時候,讀取影象、顯示影象(包括顯示視窗的設定)、對影象的顏色空間進行轉換(比如灰度影象轉換為RGB影象)、儲存影象,是最基本的操作,下面是一個簡單的demo:#include <op

顏色空間轉換

BT601和BT709 由於在處理相機實時影象資料時,需要將相機採集的YUV資料轉換為RGB,根據GPUImage的原始碼看到是有三種轉換矩陣用於將YUV資料轉換成RGB資料,分別是 // BT.601, which is the standard for SDTV. GLfloat kCo

【opecnv基礎】 002 顏色空間轉換+影象寫入

知識點 (1)顏色空間轉換 (2)影象儲存 相關API(C++) (1)顏色空間轉換函式:cvtColor() void cvtColor (InputArray src, OutputArray dst, int code, int dstcn=0) 第一、二個引數分別

RGB和CIELAB顏色空間轉換及偏色檢測

RGB轉為CIELAB 首先RGB是不可以直接轉為CIELAB顏色空間的,RGB需要先轉為CIEXYZ顏色空間,然後再由CIEXYZ顏色空間轉為CIELAB顏色空間。關於這2個顏色空間的互轉,主要參考了http://www.cnblogs.com/Imageshop/archive/

opencv顏色空間的縮減

若矩陣儲存的是單通道畫素和三通道畫素就會有非常多的顏色,所以就會有顏色空間縮減這一個說法:顏色空間值除以某個輸入值,以獲得較少的顏色數,也就是做減法,比如顏色值0-9可以取0,10-19可以取到10,顏色縮減的表示式: I(New)=(I(old)/10)10; 中間的除法是取整運算但是在處

YUV到RGB顏色空間轉換

三種顏色空間簡介: YUV:是歐洲電視系統採用的一種顏色編碼格式,Y表示亮度值(Luminance或Luma),U和V表示色彩及飽和度(Chrominance或Chroma)。 YUV主要格式有:YUV444、YUV 422、YUV 411和YUV 420。YUV對原始資料

【Codecs】顏色空間轉換CSconvert:YUV420轉YUV444

Date: 2018.5.31 1、YUV分三種取樣方式: YUV444:對於每一個畫素都對應一個Y分量、一個U分量、一個V分量。 YUV422:對於一個畫素都對應一個Y分量,但是每兩個畫素(或者說Y分量)對應一個U分量和一個V分量。 YUV42

顏色空間轉換:RGB轉換為Lab(Matlab)

 Convert RGB image to L*a*b*, assuming input image is sRGB.         rgb = imread('peppers.png');         cform = makecform('srgb2lab');

opencv中的cv2.cvtColor()函式中將BGR圖轉換為YCrCb及YCR_CB所使用的公式及程式碼驗證

【時間】2018.11.13 【題目】opencv中的cv2.cvtColor()函式中將BGR圖轉換為YCrCb及YCR_CB所使用的公式及程式碼驗證 概述 在opencv中,可以使用cv2.cvtColor()函式將BGR圖轉換為YCrCb及YCR_CB,本文主要講述他們所使用的由B

使用OpenCV實現RGB、HSI、CMYK顏色空間轉換

  使用OpenCV實現RGB、HSI、CMYK顏色空間的轉換   CMYK CMYK是一種依靠反光的色彩模式,我們是怎樣閱讀報紙的內容呢?是由陽光或燈光照射到報紙上,再反射到我們的眼中,才看到內容。它需要有外界光源,如果你在黑暗房間內是無法閱讀報紙的。只要在螢幕

opencv-python 讀取影象並轉換顏色空間

#-*- encoding:utf-8 -*- ''' python 繪製顏色直方圖 ''' import cv2 import numpy as np from matplotlib import pyplot as plt def readImage(): #

OpenCV顏色轉換和面板檢測

本筆記重點記錄OpenCV中的顏色轉換和利用色彩空間的特性進行面板檢測 顏色轉換 實現原理 之所以要引入色調/飽和度/亮度的色彩空間概念,是因為人們喜歡憑直覺分辨各種顏色,而它與這種方式吻合。實際上,人類更喜歡用色彩、彩度、亮度等直觀的屬性來描述顏色,而大多 數直覺色彩空間正是基於這三個屬性。

OpenCV(二)——LUT顏色空間縮減

LUT是look up table的縮寫,中文解釋:顯示查詢表,實際意義很簡單易懂。 舉個例子,如果是單通道的影象,灰度梯度是0~255,即分為256級。 你可以設定對應灰度轉化成你設定成的灰度 table[256]; table[0] = 2; table[1] = 5; 像上圖就

macOS python3 opencv 影象 顏色空間

python3 opencv 彩色影象轉換為灰色影象 1,imshow()顯示影象 1,imshow()顯示影象 cv2.IMREAD_COLOR 1 彩色 cv2.IMREAD_GRAYSCALE 0 灰色 cv2.IMR