#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
using namespace cv;
using namespace std;
/// 全局变量
Mat src; Mat hsv; Mat hue;
int bins = 25;
/// 函数申明
void Hist_and_Backproj(int, void*);
/** @函数 main */
int main(int argc, char** argv)
{
/// 读取图像
///src = imread(argv[1], 1);
src = imread("1.jpg");
/// 转换到 HSV 空间
cvtColor(src, hsv, CV_BGR2HSV);
/// 分离 Hue 通道
hue.create(hsv.size(), hsv.depth());
int ch[] = { 0, 0 };
//mixChannels 用来抽取 HSV 图像的 0 通道(Hue)。该函数接受了以下的实参:
//&hsv:一系列输入图像的数组,被拷贝的通道的来源
//1:输入数目中图像的数目
//&hue:一系列目的图像的数组,储存拷贝的通道
//1:目的数组中图像的数目
//ch[]={0,0}:通道索引对的数组,指示如何将输入图像的某一通道拷贝到目的图像的某一通道。
在这里,&hsv 图像的 Hue(0)通道被拷贝到&hue 图像(单通道)的 0 通道
//1:通道索引对的数目
mixChannels(&hsv, 1, &hue, 1, ch, 1);
/// 创建 Trackbar 来输入 bin 的数目
const char* window_image = "Source image";
namedWindow(window_image, CV_WINDOW_AUTOSIZE);
createTrackbar("* Hue bins: ", window_image, &bins, 180, Hist_and_Backproj);