iplimage

OpenCV图像识别、移动侦测、边缘检测实现及 cvCopy()和cvCloneImage()的区别

空扰寡人 提交于 2020-03-02 04:44:13
#include <stdio.h> #include <time.h> #include <cv.h> #include <cxcore.h> #include <highgui.h> int main( int argc, char** argv ) { //声明IplImage指针 IplImage* pFrame = NULL; //pFrame为视频截取的一帧 IplImage* pFrame1 = NULL; //第一帧 IplImage* pFrame2 = NULL;//第二帧 IplImage* pFrame3 = NULL;//第三帧 IplImage* pFrImg = NULL; //pFrImg为当前帧的灰度图 IplImage* pBkImg = NULL; //pBkImg为当前背景的灰度图 IplImage* pBkImgTran = NULL;//pBkImgTran为当前背景处理过的图像 IplImage* pFrImgTran = NULL;//pFrImgTran为当前背景处理过的图像 CvMat* pFrameMat = NULL; //pFrameMat为当前灰度矩阵 CvMat* pFrMat = NULL; //pFrMat为当前前景图矩阵,当前帧减去背景图 CvMat* bg1 = NULL; CvMat* bg2 = NULL;

Cvmat IplImage

大城市里の小女人 提交于 2020-03-02 04:21:38
做个标记,今天调bug,最后坑在这里了,墓志铭啊! IplImage转Cvmat IplImage* src = cvLoadImage("src.jpg",0);//load 一个图像,顺便gary掉 CvMat* target=cvCreateMat(src->height,src->width,CV_32SC1);//目标矩阵 cvConvert(src,target);//功能函数 ///////////////////////////////////////////////////////////////////////////////// Cvmat *target;//目标矩阵 mat=cvGetmat(src,target);//蛋疼 ///////////////////////////////////////////////////////////////////////////////// Cvmat转IplImage IplImage* img = cvCreateImage(cvGetSize(target),8,1);//单通道八位图(32位图) cvGetImage(target,img);//功能函数 cvSaveImage("img.jpg",img);//保存图像 来源: oschina 链接: https://my.oschina.net/u

opencv中的几种常见的图像数据类型

我的未来我决定 提交于 2020-03-02 04:21:27
1 opencv中的几种常见的图像类型 opencv中,几种常见的图像类型有: IplImage,Mat,CvMat,CvArr CvArr : 老版本的结构了。是一个抽象基类,在函数原型中,常见到CvArr(CvArr*),这就允许吧CvMar* 或者IplImage* 传递到程序或函数参数中了。 CvMat : 矩阵结构, IplImage : 是较老版本的一种类型了,对图像进行”编码“的基本结构。这些图像可能是灰度,彩色,4通道的(RGB+ alpha),其中,每个通道可以包含任意的整数或浮点数。 Mat: 新版本中的强大的一个图像容器,是和Matlab中的函数对应的。 基本上讲 Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是不同的维数)的指针。矩阵头的尺寸是常数值,但矩阵本身的尺寸会依图像的不同而不同,通常比矩阵头的尺寸大数个数量级。 2 opencv中存储图像类型转换 (1)将IplImage类型转换到Mat类型 Mat::Mat(const IplImage* img, bool copyData=false); 默认情况下,新的Mat类型与原来的IplImage类型共享图像数据,转换只是创建一个Mat矩阵头。当将参数copyData设为true后

IplImage 、cvMat 、Mat三者比较

半世苍凉 提交于 2020-03-02 03:42:10
IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化。而CvMat和IplImage类型更侧重于“图像”,opencv对其中的图像操作(缩放、单通道提取、图像阈值操作等)进行了优化。在opencv2.0之前,opencv是完全用C实现的,但是,IplImage类型与CvMat类型的关系类似于面向对象中的继承关系。实际上,CvMat之上还有一个更抽象的基类----CvArr,这在源代码中会常见。 1. IplImage opencv中的图像信息头,该结构体定义: typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; /* 版本 (=0)*/ int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */ int alphaChannel; /* 被OpenCV忽略 */ int depth; /* 像素的位深度: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U, IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F

直方图均衡化原理

感情迁移 提交于 2020-02-28 07:54:20
直方图均衡化的作用是图像增强。 有两个问题比较难懂,一是为什么要选用累积分布函数,二是为什么使用累积分布函数处理后像素值会均匀分布。 第一个问题。均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒;②如果是八位图像,那么像素映射函数的值域应在0和255之间的,不能越界。综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数。 第二个问题。累积分布函数具有一些好的性质,那么如何运用累积分布函数使得直方图均衡化?比较概率分布函数和累积分布函数,前者的二维图像是参差不齐的,后者是单调递增的。直方图均衡化过程中,映射方法是 其中,n是图像中像素的总和, 是当前灰度级的像素个数,L是图像中可能的灰度级总数。 来看看通过上述公式怎样实现的拉伸。假设有如下图像: 得图像的统计信息如下图所示,并根据统计信息完成灰度值映射: 映射后的图像如下所示: 以上就是直方图映射均衡化的步骤,当然还有一些基于此的更优算法,比如Photoshop中的方法,在此就不一一列举了,大同小异。 下附源码: // HistogramGrayEqualizeHist.cpp : 定义控制台应用程序的入口点。 //

一些常用的opencv函数

别说谁变了你拦得住时间么 提交于 2020-02-16 08:02:01
分配图像空间: IplImage* cvCreateImage(CvSize size, int depth, int channels); size: cvSize(width,height); depth: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U, IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F,IPL_DEPTH_64F channels: 1, 2, 3 or 4. 注意数据为交叉存取.彩色图像的数据编排为b0 g0 r0 b1 g1 r1 ... 举例: // 分配一个单通道字节图像 IplImage* img1=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); // 分配一个三通道浮点图像 IplImage* img2=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3); 释放图像空间: IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); cvReleaseImage(&img); 复制图像: IplImage* img1=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); IplImage*

opencv的Mat对象

穿精又带淫゛_ 提交于 2020-01-27 14:25:57
IplImage: 在OpenCV中IplImage是表示一个图像的结构体,也是从OpenCV1.0到目前最为重要的一个结构; 在之前的图像表示用IplImage,而且之前的OpenCV是用C语言编写的,提供的接口也是C语言接口; 需要开发者自己分配与管理内存 Mat: Mat是后来OpenCV封装的一个C++类,用来表示一个图像,和IplImage表示基本一致,但是Mat还添加了一些图像函数; 自动分配孽畜,不存在内存泄漏的问题 在OpenCV中, IplImage 与 Mat是可以相互转换的; IplImage 转 Mat: cv::Mat * pmatImage = new cv:Mat( IplImage, 0 ): //第二个参数表示不进行像素数据copy; Mat 转 IplImage: IplImage limage = IplImage ( matImage );//不进行数据copy; Mat对象的构造函数 1、Mat::Mat() 无参数构造方法; 2、Mat::Mat(int rows, int cols, int type) 创建行数为 rows,列数为 col,类型为 type 的图像; 3、Mat::Mat(Size size, int type) 创建大小为 size,类型为 type 的图像; 4、Mat::Mat(int rows, int

Issue with boost serialization of IplImage struct

浪子不回头ぞ 提交于 2020-01-15 06:41:19
问题 I'm having trouble getting the boost serialization module to work with OpenCV's IplImage struct. Here is my code for serializing an IplImage (along with some JSON data in a custom struct) template <class Archive> void save(Archive & ar, const unsigned int version) const { // First things first; save the essential variables // These are needed as input to the create function of IplImage ar & frame->width; ar & frame->height; ar & frame->depth; ar & frame->nChannels; ar & frame->widthStep; ar &

Translucent objects on IplImage

若如初见. 提交于 2020-01-05 05:42:05
问题 I draw objects on IplImage like this: cvLine(image, point_1, point_2, color, thickness, CV_AA); // Line cvCircle(mage, point, radius, color, thickness, CV_AA); // Circle // and some others... How can I draw them translucent? cv::Scalar does not support alpha channel, if I understand correctly. I found something similar, but not quite appropriate: link. Here we are talking about translucenty IplImage , not about the objects on it. 回答1: So, I tested it now with IplImage and cv::Mat , and both

Saving as Flash in C++

若如初见. 提交于 2020-01-01 05:50:51
问题 How to save an IPLImage of OpenCV as a Flash file? Maybe there is a library that does that? 回答1: If you mean storing your output as a flash video (.flv) just use ffmpeg (libavcodec/libavformat). It is cross platform and supports the .flv format (besides a massive amout of others) and should be quite easy to do. You can embed audio too. As a note: ffmpeg is partially included in opencv (depending on your build) as a video coder/decoder, i don't know though if you can force it to write as .flv