1. 程式人生 > >用OpenCV實現Photoshop演算法(七): 調整色相飽和度

用OpenCV實現Photoshop演算法(七): 調整色相飽和度

系列文章:

用OpenCV實現Photoshop演算法(四): 色階調整

七、調整色相飽和度

Photoshop 的色相/飽和度調整,可以對全圖、紅、黃、綠、青、藍、洋紅六個通道進行設定。

每個通道可設定: 色相(hue),  飽和度(satuation), 明度(Lightness)三個調整值。


(一)顏色空間 (Color Space)

色空間也稱彩色模型(又稱彩色空間).  常用色空間有:RGB, HSL,  CYMK,  Lab等。

對於RGB影象,所謂色相/飽和度調整,就是把 RGB 轉為 HSL, 再對色相(H),  飽和度(S), 明度(L)進行調整,然後再轉回RGB.

(二)OpenCV程式碼實現

1,我用OpenCV 編寫了多個 顏色空間轉換函式, 在原始檔 ColorSpace.hpp,  ColorSpace.cpp中

2,我用OpenCV 編寫了一個 HSL類,實現色相/飽和度調整。在原始檔 ColorSpace.hpp,  ColorSpace.cpp中

3, 使用方法: HSL類有一個屬性channels[7], 定義了7個顏色通道。每個通道有hue, saturation, brightness三個值。設定好所需通道和值,再呼叫HSL類的adjust()方法即可對影象進行  色相/飽和度調整。

4, 原始檔及例程原始碼下載在這裡: 調整色相飽和度原始碼

(三)例程

使用HSL類,進行色相/飽和度調整。

#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"

#include "HSL.hpp"

using namespace std;
using namespace cv;

static string window_name = "photo";
static Mat src;

static HSL hsl;
static int color = 0;
static int hue = 180;
static int saturation = 100;
static int brightness = 100;

static void callbackAdjust(int , void *)
{
	Mat dst;

	hsl.channels[color].hue = hue - 180;
	hsl.channels[color].saturation = saturation - 100;
	hsl.channels[color].brightness = brightness - 100;

	hsl.adjust(src, dst);

	imshow(window_name, dst);
}

static void callbackAdjustColor(int , void * )
{
	hue = hsl.channels[color].hue + 180;
	saturation = hsl.channels[color].saturation + 100;
	brightness = hsl.channels[color].brightness + 100;

	setTrackbarPos("hue", window_name, hue);
	setTrackbarPos("saturation", window_name, saturation);
	setTrackbarPos("brightness", window_name, brightness);
	callbackAdjust(0, 0);
}


int main()
{
	src = imread("building.jpg");

	if ( !src.data ) {
		cout << "error read image" << endl;
		return -1;
	}

	namedWindow(window_name);
	createTrackbar("color", window_name, &color, 6, callbackAdjustColor);
	createTrackbar("hue", window_name, &hue, 2*hue, callbackAdjust);
	createTrackbar("saturation", window_name, &saturation, 2*saturation, callbackAdjust);
	createTrackbar("brightness", window_name, &brightness, 2*brightness, callbackAdjust);
	callbackAdjust(0, 0);

	waitKey();
	return 0;

}

執行效果:

原圖:


對藍色通道(color = 5)調整hue, brightness後


再對全圖(color = 0)調整saturation, brightness後


相關推薦

OpenCV實現Photoshop演算法(): 調整色相飽和度

系列文章: 用OpenCV實現Photoshop演算法(四): 色階調整 七、調整色相飽和度 Photoshop 的色相/飽和度調整,可以對全圖、紅、黃、綠、青、藍、洋紅六個通道進行設定。 每個通道可設定: 色相(hue),  飽和度(satuat

OpenCV實現Photoshop演算法(三): 曲線調整

系列文章: 用OpenCV實現Photoshop演算法(四): 色階調整 三、曲線調整( Curves Adjustment ) 曲線調整是Photoshop的最常用的重要功能之一。 網上關於曲線技術原理的材料都不完整。經過一個多月的探索、不斷實驗

OpenCV實現Photoshop演算法(十): 美白磨皮(未完)

系列文章: 用OpenCV實現Photoshop演算法(四): 色階調整 十、人像美白磨皮 人像美白磨皮是一個複雜的綜合的高技術活。 基本過程是這樣的:  選取面板區域-〉磨皮-〉美白-〉銳化 相關工作涉及多種演算法: 目前我尚在研究中,有的演算法寫

OpenCV實現Photoshop演算法(九): 高反差保留

系列文章: 用OpenCV實現Photoshop演算法(四): 色階調整 九、高反差保留(High Pass) 高反差保留是一個Photoshop的濾鏡功能。常見的用法是用於銳化,對影象進行1個畫素的高反差保留,再將得到的新影象以強光混合方式疊加在原圖上

OpenCV實現Photoshop演算法(二): 影象剪下

系列文章: 用OpenCV實現Photoshop演算法(四): 色階調整 二、影象剪下 用OpenCV 寫一個影象剪下函式 imageCrop() 如下: //影象剪下 //引數:src為源影象, dst為結果影象, rect為剪下區域 //返回

OpenCV實現Photoshop算法(三): 曲線調整

快的 nes copy eve pla 很快 view 特點 色值 http://blog.csdn.net/c80486/article/details/52499919 系列文章: 用OpenCV實現Photoshop算法(一): 圖像旋轉 用OpenCV實現Photo

Python調OpenCV實現人臉識別

source display document down char name 實現 cvt config [硬件環境] Win10 64位 [軟件環境] Python版本:2.7.3 IDE:JetBrains PyCharm 2016.3.2 Python庫: 1.1)

Python調OpenCV實現攝像頭的運動檢測

搭建過程 .get mes bsdiff 資源 read del con 函數 [硬件環境] Win10 64位 [軟件環境] Python版本:2.7.3 IDE:JetBrains PyCharm 2016.3.2 Python庫: 1.1) opencv-python

Python調OpenCV實現攝像頭的運動檢測[樹莓派版]

then see pip port wid warning number 12px ram [硬件環境] RaspberryPi 3代B型(英國版) [軟件環境] 操作系統:Raspbian Python版本:2.7.3 Python庫: 1.1) opencv-pytho

0004-OpenCV實現影象平移的程式碼(分影象尺寸不變和變兩種情況)

影象平移是啥東西就不用講了吧!需要注意的是影象平移有兩種,第一種是平移後圖像大小不變,這樣會損失影象的部分;第二種是平移後圖像大小變化,這樣原影象不會有損失。 直接上程式碼,大家看效果吧! 程式碼流程如下: 讀取影象→顯示原影象→呼叫自定義的函式translateTransform,作平移後

opencv實現圖片顏色反轉

# 灰度圖片顏色翻轉效果 import cv2 import numpy as np img = cv2.imread("1.jpg",1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] gray = cv2.cvtColor

opencv實現圖片的仿射變換和旋轉

import cv2 import numpy as np img = cv2.imread('1.jpg',1) cv2.imshow('old',img) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] matSrc = n

QT 下opencv實現影象分類(1)

一.概述 1.按影象中的內容給影象分類是計算機視覺中比較適合初學者的專案,我見過好多手機相簿都有這一個功能,比如把美食歸為一個標籤,藍天白雲歸為一個標籤等等。還有我之前做過的車牌識別的專案都用到影象分類。 2.我做這個專案的環境是QT加opencv3.2,專案在MAC上跑

一個Java實現密碼演算法,使用socket引發的血案

public static void main(String[] args) throws IOException, ParseException { ServerSocket serverSocket = new ServerSocket(1

OpenCV實現目標追蹤的八種方法(轉)

原文地址:http://m.elecfans.com/article/722414.html 編者按:目標跟蹤作為機器學習的一個重要分支,加之其在日常生活、軍事行動中的廣泛應用,很多國內外學者都對此頗有研究。本文將討論OpenCV上八種不同的目標追蹤演算法。

opencv實現立體匹配

轉自:http://blog.csdn.net/scyscyao/article/details/5443341 嘗試用OpenCV來實現立體視覺也有一段時間了,主要的參考資料就是Learning OpenCV十一、十二章和OpenCV論壇上一些前輩的討論。過程中磕磕碰碰,

機器學習 使用python+OpenCV實現knn演算法手寫數字識別

基本上照搬了http://lib.csdn.net/article/opencv/30167的程式碼,只是改了一點bug和增加了一點功能輸入就是直接在一個512*512大小的白色畫布上畫黑線,然後轉化為01矩陣,用knn演算法找訓練資料中最相近的k個,現在應該是可以對所有字元

作業系統--JavaScript實現銀行家演算法

var num_process; //記錄程序數 var num_resource;//記錄資源數 var max = new Array();//最大資源數 var need = new Array();//資源需求數 var work = new Array();//資源可用數 var work2 = n

OpenCV實現邊緣演算法

1.功能:  粗略的描繪影象的邊緣 2.演算法:  將當前畫素與鄰接的下部和右部的畫素進行比較,如果相似,則將當前畫素設定為黑色,否則設定為白色。用到的演算法為歐氏距離演算法。 3.程式碼:

深度學習基礎系列 (二) sklearn 實現 ID3 演算法

什麼是決策樹/判定樹(decision tree) 判定樹是一個類似於流程圖的樹結構:其中,每個內部結點表示在一屬性上的測試, 每個分支代表一個屬性輸出,而每個樹葉結點代表類或類分佈。樹的頂層是根結點。 熵(entropy)概念 1948年,夏農