欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V 博客分类: Opencv opencv图像分离RGBHSV 

程序员文章站 2024-02-13 16:27:16
...

            刚刚把去年写过的几篇博文下架了,感觉没下什么功夫在上面,不太值得小伙伴们费神,干脆全部删掉,重新开始嘛基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 

        这学期我们大智能开始第一波专业课,基于Opencv下的计算机视觉处理,感觉比较有趣,希望通过不断的学习能够在日后做出自己喜欢的作品。

        这次博文属于我的第一个课程实验,初次接触,印象最为深刻。

       

1)初次接触

这是脑与科学的第一个实验,看到实验内容时感觉无从下手,因为自己只是刚刚把Opencv库函数装载好,只会一个当初搭建环境时助教给的小程序里面的cvShowImage显示图像函数,感觉要坑;

2)尝试解决

起初,感觉自己学了一年多编程了,自我感觉良好,觉得看看相关教程就可以轻松解决,于是乎,拿起

 

<!--EndFragment-->基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 一顿看,结果看的自己一头雾水,自信心受挫;

3)求助度娘

没办法,怀着忐忑不安的心情,点进了百度,一下子找到了很多相关的文章,从中copy了一份分离R/G/B单通道的,启动调试,竟然成功了;

4)然后呢

相信除了少数技术大神,许多人都会想我一样寻求度娘的帮助,但是,接下来的问题,不同人会有不同的后续。。。。。。

next>>

 

许多小朋友往往找到自己所需的答案后,就不再继续深入研究,这样做很不好,不能知其然而不知其所以然。

 

首先,我把程序里面出现的函数,全部转到函数声明,然后寻找其头文件,查看它们的源代码,下面先罗列一下本次直言所遇到的函数(简单的忽略)

 

 

 

cvLoadImage("F:\\Fruits.jpg",1);//载入图像,注意此处1为正数//表示作为三通道图像载入

 

 

 

cvCreateImage(size,depth,channels) //函数,depth 图像元素的位深//,IPL_DEPTH_8U 表示无符号8位整型

 

cvSplit( const CvArr* src,CvArr* dst0,CvArr* dst1,CvArr* dst2,CvArr* dst3 )

 

//复制多通道src图像的各个通道到单通道图像//dst0,dst1,dst2dst3

 

cvMerge( const CvArr* src0, const CvArr* src1,const CvArr* src2, const CvArr* src3,CvArr* dst )

 

//cvSplit相反,将3个单通道合成为一个多通道图像

 

 

 

cvReleaseImage( IplImage** image )

 

//销毁已定义的image指针变量,释放占用内存空间

 

cvCvtColor(img,hsv,CV_BGR2HSV)

 

//实现RGB颜色向HSV,HSI等颜色空间的转换

 

 

 

看完这些函数,虽然已解释的很详细,但毕竟是被封装过的,许多内部原理不可能完全理解,下面,我们再来仔细研究RBG——HSV

 

模型问题

 

1. RGB模型。

 

三维坐标:

 

基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 

 

原点到白色顶点的中轴线是灰度线,rgb三分量相等,强度可以由三分量的向量表示。

 

RGB来理解色彩、深浅、明暗变化:

 

色彩变化: 三个坐标轴RGB最大分量顶点与黄紫青YMC色顶点的连线

 

深浅变化:RGB顶点和CMY顶点到原点和白色顶点的中轴线的距离

明暗变化:中轴线的点的位置,到原点,就偏暗,到白色顶点就偏亮

PS: 光学的分析

 

三原色RGB混合能形成其他的颜色,并不是说物理上其他颜色的光是由三原色的光混合形成的,每种单色光都有自己独特的光谱,如黄光是一种单色光,但红色与绿色混合能形成黄色,原因是人的感官系统所致,与人的生理系统有关。

 

只能说将三原色光以不同的比例复合后,对人的眼睛可以形成与各种频率的可见光等效的色觉。

 

2. HSV模型

 

倒锥形模型:

 

基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 

 

HSV模型的圆锥表示适合于在一个单一物体中展示整个HSV色彩空间。

 

这个模型就是按色彩、深浅、明暗来描述的。

 

H是色彩

 

S是深浅, S = 0时,只有灰度

 

V是明暗,表示色彩的明亮程度,但与光强无直接联系(意思是有一点点联系吧)。

 

RGBHSV的联系

 

转换表达式:

 


     基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 
     基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 
     基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 
    效果图

 

 

 还不错~~

 

 实现了单通道的分离;

 

     不过我最得意的还是自己找的对象图片...

     基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 

    代码附上

 

 

#include "stdafx.h"
#include"highgui.h"
#include"cv.h"
#include<vector>
using namespace std;
using namespace cv;
int main()
{
	//载入图像
	IplImage* img=cvLoadImage("F:\\Fruits.jpg",1);
	//cvCreateImage(size,depth,channels)函数,depth 图像元素的位深度,IPL_DEPTH_8U 表示无符号8位整型
	IplImage* Bimg=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);//1为有1个通道
	IplImage* Gimg=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
	IplImage* Rimg=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);

	IplImage* pImg1=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);//3为有3个通道
	IplImage* pImg2=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
	IplImage* pImg3=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
	//将RGB图像分离
	//cvSplit( const CvArr* src,CvArr* dst0,CvArr* dst1,CvArr* dst2,CvArr* dst3 )函数
	//复制src的各个通道到图像dst0,dst1,dst2和dst3中
	cvSplit(img,Bimg,Gimg,Rimg,0);
	//目标图像必须与源图像在大小和数据类型上匹配
	//输入多通道,输出为B,G,R单通道

	//在合成之前需要清零
	cvSetZero(pImg1);
	cvSetZero(pImg2);
	cvSetZero(pImg3);
	//将三个通道合成
	//输入参数为B,G,R单通道,最后一个为输出
	//cvMerge( const CvArr* src0, const CvArr* src1,const CvArr* src2, const CvArr* src3,CvArr* dst );
	cvMerge(Bimg,0,0,0,pImg3);
	cvMerge(0,Gimg,0,0,pImg2);
	cvMerge(0,0,Rimg,0,pImg1);
	
	cvNamedWindow("RGB",1);
	cvShowImage("RGB",img);

	cvNamedWindow("R",1);
	cvShowImage("R",pImg1);

	cvNamedWindow("G",1);
	cvShowImage("G",pImg2);

	cvNamedWindow("B",1);
	cvShowImage("B",pImg3);

	//HSV图像处理
	IplImage* hsv=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);

	//将RGB图像转为HSV图像的函数
	cvCvtColor(img,hsv,CV_BGR2HSV);

	IplImage* Himg=cvCreateImage(cvGetSize(hsv),IPL_DEPTH_8U,1);
	IplImage* Simg=cvCreateImage(cvGetSize(hsv),IPL_DEPTH_8U,1);
	IplImage* Vimg=cvCreateImage(cvGetSize(hsv),IPL_DEPTH_8U,1);

	IplImage* HSV1=cvCreateImage(cvGetSize(hsv),IPL_DEPTH_8U,3);//3个通道
	IplImage* HSV2=cvCreateImage(cvGetSize(hsv),IPL_DEPTH_8U,3);
	IplImage* HSV3=cvCreateImage(cvGetSize(hsv),IPL_DEPTH_8U,3);
	//用法同上
	cvSplit(hsv,Vimg,Simg,Himg,0);

	cvNamedWindow("V",1);
	cvShowImage("V",Vimg);

	cvNamedWindow("S",1);
	cvShowImage("S",Simg);

	cvNamedWindow("H",1);
	cvShowImage("H",Himg);

	cvNamedWindow("HSV",1);
	cvShowImage("HSV",hsv);

	cvWaitKey(0);
	//RGB RELEASE
	cvReleaseImage(&img);
	cvReleaseImage(&Rimg);
	cvReleaseImage(&Gimg);
	cvReleaseImage(&Bimg);

	cvReleaseImage(&pImg1);
	cvReleaseImage(&pImg2);
	cvReleaseImage(&pImg3);
	//HSV RELEASE
	cvReleaseImage(&hsv);
	cvReleaseImage(&Himg);
	cvReleaseImage(&Simg);
	cvReleaseImage(&Vimg);

	cvReleaseImage(&HSV1);
	cvReleaseImage(&HSV2);
	cvReleaseImage(&HSV3);

	return 0;
}


 

<!--EndFragment-->

<!--EndFragment-->

<!--EndFragment-->

 

  • 基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 
  • 大小: 25.5 KB
  • 基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 
  • 大小: 48.9 KB
  • 基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 
  • 大小: 3 KB
  • 基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 
  • 大小: 1.5 KB
  • 基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 
  • 大小: 403 Bytes
  • 基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 
  • 大小: 574.4 KB
  • 基于Opencv下RGB图像转HSV,并分离成单通道R/G/B与H/S/V
            
    
    博客分类: Opencv opencv图像分离RGBHSV 
  • 大小: 121.3 KB