cvSetImageROI单窗口显示多幅单通道图片

来源:互联网 发布:java在线音乐网站源码 编辑:程序博客网 时间:2024/06/11 09:58

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

cvSplit()函数将复制src的各个通道到图像dst0,dst1,dst2和dst3中。如果源图像少于4个通道的情况下,那么传递给cvSplit()的不必要的目标参数可设置为NULL

void cvSetImageROI(IplImage* image,CvRect rect);

image 图像头,待处理图像
rect ROI 矩形

#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <cxcore.h>
static IplImage *src = NULL;
static IplImage *dst = NULL;
static IplImage *split[3] = {NULL};
int main(int argv,char **argc)
{    
    unsigned char i;
    if(argv==2&&(src = cvLoadImage(argc[1],1)))
    {    
        for(i=0;i<src->nChannels;i++)
            split[i] = cvCreateImage(cvGetSize(src),8,1);
        cvSplit(src,split[0],split[1],split[2],NULL);
        dst = cvCreateImage(cvSize(src->width*3,src->height),src->depth,1);            
        cvNamedWindow("MultiImage",1);
        cvSetImageROI(dst,cvRect(0,0,src->width,src->height));
        cvCopy(split[0],dst,NULL);
        cvResetImageROI(dst);
        cvSetImageROI(dst,cvRect(src->width,0,src->width,src->height));
        cvCopy(split[1],dst,NULL);
        cvResetImageROI(dst);
        cvSetImageROI(dst,cvRect(src->width*2,0,src->width,src->height));
        cvCopy(split[2],dst,NULL);
        cvResetImageROI(dst);        
        cvShowImage("MultiImage",dst);    
        cvWaitKey(0);
        cvReleaseImage(&split[0]);
        cvReleaseImage(&split[1]);
        cvReleaseImage(&split[2]);        
        cvReleaseImage(&src);
        cvReleaseImage(&dst);
        cvDestroyAllWindows();
    }
    return 0;
}
0 0