第7题: #include "stdafx.h" #include "cv.h" #include "highgui.h" //============================================= // // 第7题 操作三通道图像 // // // //============================================== int _tmain(int argc, _TCHAR* argv[]) { IplImage * img = cvLoadImage("E://tp//lena256.jpg"); //显示源图像 cvNamedWindow("ImageSrc"); cvShowImage("ImageSrc",img); //cvWaitKey(0); //创建三通道图像 IplImage * imgRed = cvCreateImage(cvSize(img->width, img->height), img->depth, 1); IplImage * imgGreen = cvCreateImage(cvSize(img->width, img->height), img->depth, 1); IplImage * imgBule = cvCreateImage(cvSize(img->width, img->height), img->depth, 1); //分离红,蓝,绿三通道图像 cvSplit(img, imgGreen, imgBule, imgRed,NULL); //克隆绿色通道图像 IplImage * clone1 = cvCloneImage(imgGreen); IplImage * clone2 = cvCloneImage(imgGreen); //找出最大最下值 double maxNum, minNum; cvMinMaxLoc(imgGreen, &minNum, &maxNum); //将元素赋值 double scale = (maxNum - minNum) / 2; cvSet(clone1,cvScalar(scale)); cvZero(clone2); //创建掩码 cvCmp(imgGreen, clone1, clone2, CV_CMP_GE); cvSubS(imgGreen, cvScalar(scale/2), imgGreen, clone2); //显示绿色通道图像 cvNamedWindow("Imagedst"); cvShowImage("Imagedst",imgGreen); cvWaitKey(0); //销毁窗口释放内存 cvDestroyWindow("ImageSrc"); cvDestroyWindow("Imagedst"); cvReleaseImage(&img); cvReleaseImage(&imgBule); cvReleaseImage(&imgGreen); cvReleaseImage(&imgRed); return 0; } 第八题:对于xml文件的读写概念还是不怎么清楚,这个代码是在网上原拷下来的 #include "stdafx.h" #include "cv.h" #include "highgui.h" struct my_struct { int Vaule; CvPoint point; CvRect rect; }; void write_my_struct(CvFileStorage * fs, const char * name, my_struct * ms) { //创建一个元素:长度为是10的my_struct cvWriteInt(fs,"frame_count",ms->Vaule); //被写入的数据结构为序列结构 cvStartWriteStruct(fs,"frame_point",CV_NODE_SEQ); cvWriteInt(fs,0,ms->point.x); cvWriteInt(fs,0,ms->point.y); cvEndWriteStruct(fs); cvStartWriteStruct(fs,"frame_rect",CV_NODE_SEQ); cvWriteInt(fs,0,ms->rect.x); cvWriteInt(fs,0,ms->rect.y); cvWriteInt(fs,0,ms->rect.width); cvWriteInt(fs,0,ms->rect.height); cvEndWriteStruct(fs); } void read_my_struct(CvFileStorage * fs, CvFileNode* ms_node, my_struct * ms) { int value = cvReadIntByName(fs,0,"Value",5); CvSeq* s = cvGetFileNodeByName(fs,0,"point")->data.seq; int point_x = cvReadInt((CvFileNode*)cvGetSeqElem(s,0)); int point_y = cvReadInt((CvFileNode*)cvGetSeqElem(s,1)); } int _tmain(int argc, _TCHAR* argv[]) { CvFileStorage * fs = cvOpenFileStorage("cfg.xml",0,CV_STORAGE_WRITE); my_struct ms = {10,cvPoint(10,20),cvRect(0,0,20,50)}; write_my_struct(fs,"struct",&ms); cvReleaseFileStorage(&fs); return 0; }