标签:
typedef struct _IplImage { int nSize; /* sizeof(IplImage) */ int ID; /* version (=0)*/ int nChannels; /* Most of OpenCV functions support 1,2,3 or 4 channels */ int alphaChannel; /* Ignored by OpenCV */ int depth; /* Pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported. */ char colorModel[4]; /* Ignored by OpenCV */ char channelSeq[4]; /* ditto */ int dataOrder; /* 0 - interleaved color channels 隔行扫描, 1 - separate color channels . cvCreateImage can only create images */ int origin; /* 0 - top-left origin, 1 - bottom-left origin (Windows bitmaps style). */ int align; /* Alignment of image rows (4 or 8). OpenCV ignores it and uses widthStep instead. */ int width; /* Image width in pixels. */ int height; /* Image height in pixels. */ struct _IplROI *roi; /* Image ROI. If NULL, the whole image is selected. 函数的操作被限定在一小块区域*/ struct _IplImage *maskROI; /* Must be NULL. */ void *imageId; /* " " */ struct _IplTileInfo *tileInfo; /* " " */ int imageSize; /* Image data size in bytes (==image->height*image->widthStep in case of interleaved data)*/ char *imageData; /* Pointer to aligned image data. */ int widthStep; /* Size of aligned image row in bytes. */ int BorderMode[4]; /* Ignored by OpenCV. */ int BorderConst[4]; /* Ditto. */ char *imageDataOrigin; /* Pointer to very origin of image data (not necessarily aligned) - needed for correct deallocation */ } IplImage;
#include <highgui.h>
int main(void) { IplImage* src; cvNamedWindow("Example3_12_pre", CV_WINDOW_AUTOSIZE); cvNamedWindow("Example3_12_post", CV_WINDOW_AUTOSIZE); if(((src=cvLoadImage("/home/unsw/lolo.jpg",1)) != 0 )) { int x = atoi("10"); int y = atoi("20"); int width = atoi("50"); int height = atoi("100"); int add = atoi("100"); cvShowImage( "Example3_12_pre", src);
cvSetImageROI(src, cvRect(x,y,width,height)); //设置专注范围 cvAddS(src, cvScalar(add, 0, 0, 0), src, NULL); //只在专注的范围执行函数 cvResetImageROI(src); //如果注销,下一个函数(显示图像)则只会显示指定区域
cvShowImage( "Example3_12_post",src); cvWaitKey(5000); } cvReleaseImage( &src ); cvDestroyWindow("Example3_12_pre"); cvDestroyWindow("Example3_12_post"); return 0; }
但以下方式更加灵活,方便实现多区域同时处理。
int main(int argc, char** argv) { IplImage* interest_img; CvRect interest_rect; if( argc == 7 && ((interest_img=cvLoadImage(argv[1],1)) != 0 )) { interest_rect.x = atoi(argv[2]); interest_rect.y = atoi(argv[3]); interest_rect.width = atoi(argv[4]); interest_rect.height = atoi(argv[5]); int add = atoi(argv[6]); // Assuming IplImage *interest_img; and // CvRect interest_rect; // Use widthStep to get a region of interest // // (Alternate method) // IplImage *sub_img = cvCreateImageHeader( cvSize( interest_rect.width, interest_rect.height ), interest_img->depth, interest_img->nChannels ); sub_img->origin = interest_img->origin; sub_img->widthStep = interest_img->widthStep; sub_img->imageData = interest_img->imageData + interest_rect.y * interest_img->widthStep + interest_rect.x * interest_img->nChannels; cvAddS( sub_img, cvScalar(add), sub_img ); cvReleaseImageHeader(&sub_img); cvNamedWindow( "Roi_Add", CV_WINDOW_AUTOSIZE ); cvShowImage( "Roi_Add", interest_img ); cvWaitKey(); } return 0; }
cvAbs | 计算数组中所有元素的绝对值 | |
cvAbsDiff | 计算两个数组差值的绝对值 | |
cvAbsDiffs | 计算数组和标量差值的绝对值 | |
cvAdd | 两个数组的元素级的加运算 | |
cvAdds | 一个数组和一个标量的元素级的相加运算 | |
cvAddWeighted | 两个数组的元素的加权相加运算(alpha融合) | 01 |
cvAvg | 计算数组所有元素的平均值 | |
cvAvgSdv | 计算数组中所有元素的绝对值和标准差 | |
cvCalcCovarMatrix | 计算一组n维空间向量的协方差 | |
cvCmp | 对两个数组中的所有元素运用设置的比较操作 | |
cvCmps | 对数组和标量运用设置的比较 | |
cvConvertScale | 用可选的缩放值转换数组元素类型 | |
cvConvertScaleAbs | 计算可选的缩放值的绝对值之后在转换数组元素的类型 | |
cvCopy | 把数组中的值复制到另一个数组中 | |
cvCountNonZero | 计算数组中非0值的个数 | |
cvCrossProduct | 计算两个三维向量的向量积(叉积) | |
cvCvtColor | 将数组通道从一个颜色空间转换到另外一个颜色空间 | |
cvDet | 计算方阵的行列式 | |
cvDiv | 用另外一个数组对一个数组进行元素级的除法运算 | |
cvDotProduct | 计算两个向量的点积 | |
cvEigenVV | 计算方阵的特征值和特征向量 | |
cvFlip | 围绕选定轴翻转 | |
cvGEMM | 矩阵乘法 | |
cvGetCol | 从一个数组的列中复制元素 | |
cvGetCols | 从数据的相邻的多列中复制元素 | |
cvGetDiag | 复制数组中对角线上的所有元素 | |
cvGetDims | 返回数组的维数 | |
cvGetDimSize | 返回一个数组的所有维大小 | |
cvGetRow | 从一个数组的行中复制元素 | |
cvGetRows | 从一个数组的多个相邻行中复制元素 | |
cvGetSize | 得到二维数组的尺寸,一CvSize返回 | |
cvGetSubRect | 从一个数组的子区域复制元素值 | |
cvInRange | 检查一个数组的元素是否在另外两个数组中的值范围内 | |
cvInRangeS | 检查一个数组的元素是否在另外两个标量的范围内 | |
cvInvert | 求矩阵的转置 | |
cvMahalonobis | 计算两个向量间的马氏距离 | |
cvMax | 在两个数组中进行元素级的取最大值操作 | |
cvMaxS | 在一个数组和一个标量中进行元素级的取最大值操作 | |
cvMerge | 把几个单通道图像合并为一个多通道图像 | |
cvMin | 在两个数组中进行元素级的取最小值操作 | |
cvMinS | 在一个数组和一个标量中进行元素级的取最小值操作 | |
cvMinMaxLoc | 寻找数组中的最大最小值 | |
cvMul | 计算两个数组元素级的乘积 | |
cvNot | 按位对数组中的每一个元素求反 | |
cvNorm | 计算两个数组的正态相关性 | |
cvNormalize | 将数组中的元素归一化 | |
cvOr | 对两个数组元素按位或操作 | |
cvOrs | 对数组与标量之间进行按位或操作 | |
cvReduce | 通过给定的操作符将二维数组约简为向量 | |
cvRepeat | 以平铺的方式进行数组复制 | |
cvSet | 用给定值初始化数组 | |
cvSetZero | 将数组中的所有元素初始为0 | |
cvSetIdentity | 将数组中对角线上的元素设为1,其他为0 | |
cvSolve | 求出线性方程的解 | |
cvSplit | 将多通道数组分割成但通道数组 | |
cvSub | 两个数组元素级的相减 | |
cvSubS | 元素级的从数组减去标量 | |
cvSubRS | 元素级的从标量减去数组 | |
cvSum | 对数组中的所有元素求和 | |
cvSVD | 二维矩阵的奇异值分解 | |
cvSVBkSb | 奇异值回代计算 | |
cvTrace | 计算矩阵迹 | |
cvTranspose | 矩阵的转置运算 | |
cvXor | 对两个数组进行按位异或运算 | |
cvXorS | 在数组和标量之间进行安慰异或操作 | |
cvZero | 将所有数组中的元素置为0 |
01. 两张图像融合
#include <highgui.h> #include <stdio.h> // alphablend <imageA> <image B> <x> <y> <width> <height> // <alpha> <beta> int main(void) { char *argvv[10]; argvv[1] = "/home/unsw/lolo.jpg"; argvv[2] = "/home/unsw/lolo2.jpg"; argvv[3] = "0"; argvv[4] = "0"; argvv[5] = "500"; argvv[6] = "1000"; argvv[7] = "0"; argvv[8] = "0.1"; IplImage *src1, *src2; if( ((src1=cvLoadImage(argvv[1],1)) != 0) && ((src2=cvLoadImage(argvv[2],1)) != 0 )) { int x = atoi(argvv[3]); int y = atoi(argvv[4]); int width = atoi(argvv[5]); int height = atoi(argvv[6]); double alpha = (double)atof(argvv[7]); double beta = (double)atof(argvv[8]); cvSetImageROI(src1, cvRect(x,y,width,height)); cvSetImageROI(src2, cvRect(0,0,width,height)); //mix cvAddWeighted(src1, alpha, src2, beta, 0.0, src1); cvResetImageROI(src1); cvNamedWindow( "Alpha_blend", 1 ); cvShowImage( "Alpha_blend", src1 ); cvWaitKey(5000); } else printf("Couldn‘t load one or both of %s, %s\n",argvv[1],argvv[2]); return 0; }
[OpenCV] IplImage and Functions
标签:
原文地址:http://www.cnblogs.com/jesse123/p/5654213.html