opencv图像与矩阵简单操作_第1页
opencv图像与矩阵简单操作_第2页
opencv图像与矩阵简单操作_第3页
opencv图像与矩阵简单操作_第4页
opencv图像与矩阵简单操作_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图像与矩阵的操作 #include “stdafx.h“ #include #include #include /程序所需的头文件 /两个自定义的函数,用于实现图像的条件复制,效果见如下附图。 IplImage *myCopyImage(IplImage* img, int Row, int Col, int Width, int Height); CvMat *myCopyMat(IplImage* img, int Row, int Col, int Width, int Height); /*主函数,它会调用本例程中的两个函数进行图像的剪切操作*/ int _tmain(int argc, _TCHAR* argv) /Step1:打开并显示原始图像,效果见图 2啦 IplImage *img = cvLoadImage(“Koala.jpg“, -1); /读取图像 Koala.jpg cvNamedWindow(“Image:“,1); /创建一个图像窗口 cvShowImage(“Image:“,img); /显示读取的图像 /Step2:运用内部函数复制并显示复制后的图像,效果和图 2一样,就是多了个窗口显 示这幅图像,为了对比一下而已,所以就不费篇幅啦 IplImage *copy = cvCloneImage(img); /调用内部函数复制图像 cvNamedWindow(“Copy“,1); /创建一个图像窗口 cvShowImage(“Copy“,copy); /显示复制的图像 /Step3:自己编写复制图像块函数,并显示复制的图像块(图像方式),剪切了起始位 置(200,200),宽高(300,300)的图像,函数定义看最上面,实现看后面,效果见图 3 IplImage *Block = myCopyImage(img,200,200,300,300);/自定义条件复制函数复制图 像 if(Block) /判断是否成功复制 cvNamedWindow(“SubImage“,1); /创建一个图像窗口 cvShowImage(“SubImage“,Block); /显示复制的图像块 cvWaitKey(); /等待键盘事件 cvDestroyWindow(“SubImage“); /关闭图像窗口 cvReleaseImage( /清除图像块 /Step4:自己编写复制图像块函数,并显示复制的图像块(矩阵方式),和前面的效果 是一样的,但是是对矩阵进行操作,显示的也是矩阵,效果还是图 3的样子 CvMat *a = myCopyMat(img,200,200,300,300); /自定义条件复制函数复制图像 if(a) /判断是否成功复制 cvNamedWindow(“Matrix“,1); /创建一个图像窗口 cvShowImage(“Matrix“,a); /显示复制的图像块 cvWaitKey(); /等待键盘事件 cvDestroyWindow(“Matrix“); /关闭图像窗口 cvReleaseMat( /清除图像块 cvDestroyWindow(“Image:“); /关闭原图像窗口 cvReleaseImage( /清除原图像 cvReleaseImage( /清除内部函数复制的图像 return 0; /* 上面就是调用这个函数进行剪切的,通过输入起始位置和图像的宽高就可以剪切你想要的部 分,多通道单通道都适用哦*/ IplImage *myCopyImage(IplImage* img, int Row, int Col, int Width, int Height) int img_Width = img-width; int img_Height = img-height; int img_Channel = img-nChannels; printf(“源图像参数:nt 宽:%dnt 高:%dnt 通道数:%dn“, img_Width, img_Height, img_Channel); /获取原图像的基本参数 if(Rowimg_Width) | (Col+Width)img_Height) printf(“nError:nt请输入正确的起始位置和复制宽高!nt 返回为空“); return NULL; /对条件进行判断,防止错误复制 IplImage* Block = cvCreateImage(cvSize(Width,Height),IPL_DEPTH_8U,img_Channel); /创建一幅空图像 int b_step = Block-widthStep; for (int i=0;iimageDatai*b_step+j*img_Channel+k = img-imageData(i+Row)* (img-widthStep)+(j+Col)*img_Channel+k; /三次循环,将原图中所需复制的每一个像素点填 充到新的图像中去 return Block; /* 用矩阵的方式复制图像的部分或者全部,效果和上面一样,过程起始页差不多,只是里面的 操作对象就是矩阵。PS:当然图像也是矩阵,要是这么看的话就无差别了*/ CvMat *myCopyMat(IplImage* img, int Row, int Col, int Width, int Height) int img_Width = img-width; int img_Height = img-height; int img_Channel = img-nChannels; printf(“源图像参数:nt 宽:%dnt 高:%dnt 通道数:%dn“, img_Width, img_Height, img_Channel); /获取原图像的基本参数 if(Rowimg_Width) | (Col+Width)img_Height) printf(“nError:nt请输入正确的起始位置和复制宽高!nt 返回为空“); return NULL; /对条件进行判断,防止错误复制 CvMat *a = cvCreateMat(Height, Width, CV_MAKETYPE(CV_8U,img_Channel); /创建一幅空矩阵 int b_step = a-step; for (int i=0;idata.ptri*b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论