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通道的就编程单通道了,未解决,希望看到的帮忙解决一下,谢谢!