opencv程序十六:图片合成

cvSetImageROI函数和cvCopy函数的用法:

cvSetImageROI(IplImage*dst,cvRect(左边界,上边界,宽度,高度))。他的作用是把图像在图像dst中开辟出cvRect矩形框区域大小的内存空间,然后cvCopy(IplImage*src,IplImage*dst)函数会将源图像src复制到目标图像dst中。

程序如下:

// 22HeChengImage.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
 
#include <cv.h>  
#include <highgui.h>  
int main()  
{  
    char* filePath ="lena.jpg";  
    IplImage* srcImg = cvLoadImage(filePath);  
    IplImage* greyImg = cvCreateImage(cvGetSize(srcImg), srcImg->depth, 1);  
    IplImage* cannyImg = cvCreateImage(cvGetSize(greyImg), srcImg->depth, 1);  
    CvSize dstSize;  
    dstSize.width = srcImg->width *3.0;  
    dstSize.height = srcImg->height;  
    IplImage* dstImg = cvCreateImage(dstSize, srcImg->depth, srcImg->nChannels);  
    cvZero(dstImg);  
    cvConvertImage(srcImg, greyImg);      
    cvCanny(greyImg, cannyImg, 150, 100); 
	
    //----------------------------------  
    //载入原图像到目标图像  
    cvSetImageROI(dstImg, cvRect(0, 0, srcImg->width, srcImg->height));  
    cvRepeat(srcImg, dstImg);  
     cvResetImageROI(dstImg); 
    //载入灰度图像到目标图像  
    cvSetImageROI(dstImg, cvRect(srcImg->width, 0, srcImg->width, srcImg->height));  
    dstImg->nChannels =1;  
    cvRepeat(greyImg, dstImg);  
    cvResetImageROI(dstImg);  
    //载入边缘检测图像到目标图像  
    cvSetImageROI(dstImg, cvRect((srcImg->width) *2.0, 0, srcImg->width, srcImg->height));  
    dstImg->nChannels =1;  
    cvCopy(cannyImg, dstImg);  
    cvResetImageROI(dstImg);  
    //---------------------------------------  
    cvNamedWindow("dstImg");  
    cvShowImage("dstImg", dstImg);  
    cvWaitKey(0);  
    cvReleaseImage(&srcImg);  
    cvReleaseImage(&greyImg);  
    cvReleaseImage(&cannyImg);  
    cvReleaseImage(&dstImg);  
    cvDestroyWindow("dstImg");  
    return 0;  
}

问题:

合成图像的时候原始图像是3通道的,其余两幅灰度图和轮廓图都是单通道的,导致合成在一起的时候3通道的就编程单通道了,未解决,希望看到的帮忙解决一下,谢谢!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值