图像绘制功能

图像绘制功能

 

  1. /*   
  2. 功能:展示OpenCV的图像绘制功能 
  3. */  
  4. #include "stdafx.h"  
  5. #include "cv.h"  
  6. #include "highgui.h"  
  7. #include <stdlib.h>  
  8. #include <stdio.h>  
  9. #define NUMBER 100  
  10. #define DELAY 5  
  11. char wndname[] = "Drawing Demo";  
  12. CvScalar random_color(CvRNG* rng)  
  13. {  
  14.     int icolor = cvRandInt(rng);  
  15.     return CV_RGB(icolor&255, (icolor>>8)&255, (icolor>>16)&255);  
  16. }  
  17. //CV_RGB  
  18. //创建一个色彩值.  
  19. // #define CV_RGB( r, g, b )  cvScalar( (b), (g), (r) )  
  20. //======================================================================  
  21. //RandInt  
  22. //返回 32-bit 无符号整型并更新 RNG  
  23. //unsigned cvRandInt( CvRNG* rng );  
  24. //rng  
  25. //被 cvRNG 初始化的 RNG 状态,被 RandSetRange   
  26. //(虽然, 后面这个函数对我们正讨论的函数的结果没有什么影响)随意地设置。  
  27. //函数 cvRandInt 返回均匀分布的随机 32-bit 无符号整型值并更新 RNG 状态。  
  28. //它和 C 运行库里面的 rand() 函数十分相似,  
  29. //但是它产生的总是一个 32-bit 数而 rand() 返回一个 0 到 RAND_MAX   
  30. //(它是 2**16 或者 2**32, 依赖于操作平台)之间的数。  
  31. //该函数用来产生一个标量随机数,例如点, patch sizes, table indices 等,  
  32. //用模操作可以产生一个确定边界的整数,人和其他特定的边界缩放到 0.. 1可以产生一个浮点数。  
  33. //==============================================================================================  
  34.   
  35. int main( int argc, char** argv )  
  36. {  
  37.     int line_type = CV_AA; // change it to 8 to see non-antialiased graphics  
  38.     //  Line  
  39.     //绘制连接两个点的线段  
  40.     //void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,  
  41.     //             int thickness=1, int line_type=8, int shift=0 );  
  42.     //img  
  43.     //图像。  
  44.     //pt1  
  45.     //线段的第一个端点。  
  46.     //pt2  
  47.     //线段的第二个端点。  
  48.     //color  
  49.     //线段的颜色。  
  50.     //thickness  
  51.     //线段的粗细程度。  
  52.     //line_type  
  53.     //线段的类型。  
  54.     //8 (or 0) - 8-connected line(8邻接)连接 线。  
  55.     //4 - 4-connected line(4邻接)连接线。  
  56.     //CV_AA - antialiased 线条。  
  57.     //shift  
  58.     //坐标点的小数点位数。  
  59.     //函数cvLine 在图像中的点1和点2之间画一条线段。  
  60.     //线段被图像或感兴趣的矩形(ROI rectangle)所裁剪。  
  61.     //对于具有整数坐标的non-antialiasing 线条,  
  62.     //使用8-连接或者4-连接Bresenham 算法。画粗线条时结尾是圆形的。  
  63.     //画 antialiased 线条使用高斯滤波。要指定线段颜色,用户可以使用使用宏CV_RGB( r, g, b )。  
  64.     int i;  
  65.     CvPoint pt1,pt2;  
  66.     double angle;  
  67.     CvSize sz;  
  68.     CvPoint  ptt[6];  
  69.     CvPoint* pt[2];  
  70.     int  arr[2];  
  71.     CvFont font;  
  72.     CvRNG rng;  
  73.     int width = 1000, height = 700;  
  74.     int width3 = width*3, height3 = height*3;  
  75.     CvSize text_size;  
  76.     int ymin = 0;  
  77.     // Load the source image  
  78.     IplImage* image = cvCreateImage( cvSize(width,height), 8, 3 );  
  79.     //  CreateImage  
  80.     //创建头并分配数据  
  81.     //IplImage* cvCreateImage( CvSize size, int depth, int channels );  
  82.     //size  
  83.     //图像宽、高.  
  84.     //depth   
  85.     //图像元素的位深度,可以是下面的其中之一:  
  86.     //IPL_DEPTH_8U - 无符号8位整型  
  87.     //IPL_DEPTH_8S - 有符号8位整型  
  88.     //IPL_DEPTH_16U - 无符号16位整型  
  89.     //IPL_DEPTH_16S - 有符号16位整型  
  90.     //IPL_DEPTH_32S - 有符号32位整型  
  91.     //IPL_DEPTH_32F - 单精度浮点数  
  92.     //IPL_DEPTH_64F - 双精度浮点数  
  93.     //channels   
  94.     //每个元素(像素)的颜色通道数量.  
  95.     //可以是 1, 2, 3 或 4.通道是交叉存取的,  
  96.     //例如通常的彩色图像数据排列是:  
  97.     //b0 g0 r0 b1 g1 r1 ...  
  98.     //虽然通常 IPL 图象格式可以存贮非交叉存取的图像,  
  99.     //并且一些OpenCV 也能处理他, 但是这个函数只能创建交叉存取图像.  
  100.     //函数 cvCreateImage 创建头并分配数据,这个函数是下列的缩写型式  
  101.     //header = cvCreateImageHeader(size,depth,channels);  
  102.     //cvCreateData(header); //只是创建空间,并不会初始化空间内的数据  
  103.     IplImage* image2;  
  104.     // Create a window  
  105.     cvNamedWindow(wndname, 1 );  
  106.     //  cvNamedWindow  
  107.     //  
  108.     //创建窗口  
  109.     //int cvNamedWindow( const char* name, int flags=CV_WINDOW_AUTOSIZE );  
  110.     //name   
  111.     //窗口的名字,它被用来区分不同的窗口,并被显示为窗口标题。  
  112.     //flags   
  113.     //窗口属性标志,为1时表示会根据图像自动调整窗口大小。  
  114.     //目前唯一支持的标志是CV_WINDOW_AUTOSIZE。当这个标志被设置后,  
  115.     //用户不能手动改变窗口大小,窗口大小会自动调整以适合被显示图像(参考cvShowImage)。  
  116.     //函数cvNamedWindow创建一个可以放置图像和trackbar的窗口。  
  117.     //被创建的窗口可以通过它们的名字被引用。  
  118.     //如果已经存在这个名字的窗口,这个函数将不做任何事情。  
  119.     cvZero( image );  
  120.     //将要显示的矩阵置零,即显示黑色  
  121.     cvShowImage(wndname,image);  
  122.     //cvShowImage  
  123.     //  
  124.     //在指定窗口中显示图像  
  125.     //void cvShowImage( const char* name, const CvArr* image );  
  126.     //name  
  127.     //窗口的名字。  
  128.     //image  
  129.     //被显示的图像。  
  130.     //函数cvShowImage 在指定窗口中显示图像。  
  131.     //如果窗口创建的时候被设定标志CV_WINDOW_AUTOSIZE,那么图像将以原始尺寸显示;  
  132.     //否则,图像将被伸缩以适合窗口大小。  
  133.     rng = cvRNG((unsigned)-1);  
  134.     pt[0] = &(ptt[0]);  
  135.     pt[1] = &(ptt[3]);  
  136.     arr[0] = 3;  
  137.     arr[1] = 3;  
  138.     for (i = 0; i< NUMBER; i++)  
  139.     {  
  140.         pt1.x=cvRandInt(&rng) % width3 - width;  
  141.         pt1.y=cvRandInt(&rng) % height3 - height;  
  142.         pt2.x=cvRandInt(&rng) % width3 - width;  
  143.         pt2.y=cvRandInt(&rng) % height3 - height;  
  144.         //Line  
  145.         //绘制连接两个点的线段  
  146.         //void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,  
  147.         //             int thickness=1, int line_type=8, int shift=0 );  
  148.         //img  
  149.         //图像。  
  150.         //pt1  
  151.         //线段的第一个端点。  
  152.         //pt2  
  153.         //线段的第二个端点。  
  154.         //color  
  155.         //线段的颜色。  
  156.         //thickness  
  157.         //线段的粗细程度。  
  158.         //line_type  
  159.         //线段的类型。  
  160.         //8 (or 0) - 8-connected line(8邻接)连接 线。  
  161.         //4 - 4-connected line(4邻接)连接线。  
  162.         //CV_AA - antialiased 线条。  
  163.         //shift  
  164.         //坐标点的小数点位数。  
  165.         //函数cvLine 在图像中的点1和点2之间画一条线段。  
  166.         //线段被图像或感兴趣的矩形(ROI rectangle)所裁剪。  
  167.         //对于具有整数坐标的non-antialiasing 线条,使用8-连接或者4-连接Bresenham 算法。  
  168.         //画粗线条时结尾是圆形的。画 antialiased 线条使用高斯滤波。  
  169.         //要指定线段颜色,用户可以使用使用宏CV_RGB( r, g, b )。  
  170.         //cvLine( image, pt1, pt2, random_color(&rng), cvRandInt(&rng)%10, line_type, 0 );  
  171.         cvLine( image, pt1, pt2, random_color(&rng), cvRandInt(&rng)%10, line_type, 0 );  
  172.         cvShowImage(wndname,image);  
  173.         //cvWaitKey  
  174.         //  
  175.         //等待按键事件  
  176.         //int cvWaitKey( int delay=0 );  
  177.         //delay   
  178.         //延迟的毫秒数。  
  179.         //函数cvWaitKey无限制的等待按键事件(delay<=0时);  
  180.         //或者延迟"delay"毫秒。返回值为被按键的值,如果超过指定时间则返回-1。  
  181.         //注释:这个函数是HighGUI中唯一能够获取和操作事件的函数,  
  182.         //所以在一般的事件处理中,它需要周期地被调用,  
  183.         //除非HighGUI被用在某些能够处理事件的环境中。  
  184.         //译者注:比如在MFC环境下,这个函数不起作用。  
  185.         cvWaitKey(DELAY);  
  186.     }  
  187.     for (i = 0; i< NUMBER; i++)  
  188.     {  
  189.         pt1.x=cvRandInt(&rng) % width3 - width;  
  190.         pt1.y=cvRandInt(&rng) % height3 - height;  
  191.         pt2.x=cvRandInt(&rng) % width3 - width;  
  192.         pt2.y=cvRandInt(&rng) % height3 - height;  
  193.         //Rectangle  
  194.         //绘制简单、指定粗细或者带填充的 矩形  
  195.         //void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,  
  196.         //                  int thickness=1, int line_type=8, int shift=0 );  
  197.         //img  
  198.         //图像.  
  199.         //pt1  
  200.         //矩形的一个顶点。  
  201.         //pt2  
  202.         //矩形对角线上的另一个顶点  
  203.         //color  
  204.         //线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。  
  205.         //thickness  
  206.         //组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。  
  207.         //line_type  
  208.         //线条的类型。见cvLine的描述  
  209.         //shift  
  210.         //坐标点的小数点位数。  
  211.         //   
  212.         //函数 cvRectangle 通过对角线上的两个顶点绘制矩形。  
  213.         cvRectangle( image,pt1, pt2, random_color(&rng), cvRandInt(&rng)%10-1, line_type, 0 );  
  214.         cvShowImage(wndname,image);  
  215.         cvWaitKey(DELAY);  
  216.     }  
  217.     for (i = 0; i< NUMBER; i++)  
  218.     {  
  219.         pt1.x=cvRandInt(&rng) % width3 - width;  
  220.         pt1.y=cvRandInt(&rng) % height3 - height;  
  221.         sz.width =cvRandInt(&rng)%200;  
  222.         sz.height=cvRandInt(&rng)%200;  
  223.         angle = (cvRandInt(&rng)%1000)*0.180;  
  224.         //Ellipse  
  225.         //绘制椭圆圆弧和椭圆扇形。  
  226.         //void cvEllipse( CvArr* img, CvPoint center, CvSize axes, double angle,  
  227.         //                double start_angle, double end_angle, CvScalar color,  
  228.         //                int thickness=1, int line_type=8, int shift=0 );  
  229.         //img  
  230.         //图像。  
  231.         //center  
  232.         //椭圆圆心坐标。  
  233.         //axes  
  234.         //轴的长度。  
  235.         //angle  
  236.         //偏转的角度。  
  237.         //start_angle  
  238.         //圆弧起始角的角度。.  
  239.         //end_angle  
  240.         //圆弧终结角的角度。  
  241.         //color  
  242.         //线条的颜色。  
  243.         //thickness  
  244.         //线条的粗细程度。  
  245.         //line_type  
  246.         //线条的类型,见CVLINE的描述。  
  247.         //shift  
  248.         //圆心坐标点和数轴的精度。  
  249.         //具体参数显示属性参考:http://www.opencv.org.cn/index.php/Cxcore%E7%BB%98%E5%9B%BE%E5%87%BD%E6%95%B0#Rectangle  
  250.         cvEllipse( image, pt1, sz, angle, angle - 100, angle + 200,  
  251.             random_color(&rng), cvRandInt(&rng)%10-1, line_type, 0 );  
  252.         cvShowImage(wndname,image);  
  253.         cvWaitKey(DELAY);  
  254.     }  
  255.     for (i = 0; i< NUMBER; i++)  
  256.     {  
  257.         pt[0][0].x=cvRandInt(&rng) % width3 - width;  
  258.         pt[0][0].y=cvRandInt(&rng) % height3 - height;  
  259.         pt[0][1].x=cvRandInt(&rng) % width3 - width;  
  260.         pt[0][1].y=cvRandInt(&rng) % height3 - height;  
  261.         pt[0][2].x=cvRandInt(&rng) % width3 - width;  
  262.         pt[0][2].y=cvRandInt(&rng) % height3 - height;  
  263.         pt[1][0].x=cvRandInt(&rng) % width3 - width;  
  264.         pt[1][0].y=cvRandInt(&rng) % height3 - height;  
  265.         pt[1][1].x=cvRandInt(&rng) % width3 - width;  
  266.         pt[1][1].y=cvRandInt(&rng) % height3 - height;  
  267.         pt[1][2].x=cvRandInt(&rng) % width3 - width;  
  268.         pt[1][2].y=cvRandInt(&rng) % height3 - height;  
  269.         //PolyLine  
  270.         //绘制简单线段或折线。  
  271.         //void cvPolyLine( CvArr* img, CvPoint** pts, int* npts, int contours, int is_closed,  
  272.         //                 CvScalar color, int thickness=1, int line_type=8, int shift=0 );  
  273.         //img  
  274.         //图像。  
  275.         //pts  
  276.         //折线的顶点指针数组。  
  277.         //npts  
  278.         //折线的定点个数数组。也可以认为是pts指针数组的大小  
  279.         //contours  
  280.         //折线的线段数量。  
  281.         //is_closed  
  282.         //指出多边形是否封闭。如果封闭,函数将起始点和结束点连线。  
  283.         //color  
  284.         //折线的颜色。  
  285.         //thickness  
  286.         //线条的粗细程度。  
  287.         //line_type  
  288.         //线段的类型。参见cvLine。  
  289.         //shift  
  290.         //顶点的小数点位数。  
  291.         //函数cvPolyLine 绘制一个简单直线或折线。  
  292.         cvPolyLine( image, pt, arr, 2, 1, random_color(&rng), cvRandInt(&rng)%10, line_type, 0 );  
  293.         cvShowImage(wndname,image);  
  294.         cvWaitKey(DELAY);  
  295.     }  
  296.     for (i = 0; i< NUMBER; i++)  
  297.     {  
  298.         pt[0][0].x=cvRandInt(&rng) % width3 - width;  
  299.         pt[0][0].y=cvRandInt(&rng) % height3 - height;  
  300.         pt[0][1].x=cvRandInt(&rng) % width3 - width;  
  301.         pt[0][1].y=cvRandInt(&rng) % height3 - height;  
  302.         pt[0][2].x=cvRandInt(&rng) % width3 - width;  
  303.         pt[0][2].y=cvRandInt(&rng) % height3 - height;  
  304.         pt[1][0].x=cvRandInt(&rng) % width3 - width;  
  305.         pt[1][0].y=cvRandInt(&rng) % height3 - height;  
  306.         pt[1][1].x=cvRandInt(&rng) % width3 - width;  
  307.         pt[1][1].y=cvRandInt(&rng) % height3 - height;  
  308.         pt[1][2].x=cvRandInt(&rng) % width3 - width;  
  309.         pt[1][2].y=cvRandInt(&rng) % height3 - height;  
  310.         //FillPoly  
  311.         //填充多边形内部  
  312.         //void cvFillPoly( CvArr* img, CvPoint** pts, int* npts, int contours,  
  313.         //                 CvScalar color, int line_type=8, int shift=0 );  
  314.         //img  
  315.         //图像。  
  316.         //pts  
  317.         //指向多边形的数组指针。  
  318.         //npts  
  319.         //多边形的顶点个数的数组。  
  320.         //contours  
  321.         //组成填充区域的线段的数量。  
  322.         //color  
  323.         //多边形的颜色。  
  324.         //line_type  
  325.         //组成多边形的线条的类型。  
  326.         //shift  
  327.         //顶点坐标的小数点位数。  
  328.         //函数cvFillPoly用于一个单独被多边形轮廓所限定的区域内进行填充。  
  329.         //函数可以填充复杂的区域,例如,有漏洞的区域和有交叉点的区域等等。  
  330.         cvFillPoly( image, pt, arr, 2, random_color(&rng), line_type, 0 );  
  331.         cvShowImage(wndname,image);  
  332.         cvWaitKey(DELAY);  
  333.     }  
  334.     for (i = 0; i< NUMBER; i++)  
  335.     {  
  336.         pt1.x=cvRandInt(&rng) % width3 - width;  
  337.         pt1.y=cvRandInt(&rng) % height3 - height;  
  338.         //Circle  
  339.         //绘制圆形。  
  340.         //void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color,  
  341.         //               int thickness=1, int line_type=8, int shift=0 );  
  342.         //img  
  343.         //图像。  
  344.         //center  
  345.         //圆心坐标。  
  346.         //radius  
  347.         //圆形的半径。  
  348.         //color  
  349.         //线条的颜色。  
  350.         //thickness  
  351.         //如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充。  
  352.         //line_type  
  353.         //线条的类型。见 cvLine 的描述  
  354.         //shift  
  355.         //圆心坐标点和半径值的小数点位数。  
  356.         //函数cvCircle绘制或填充一个给定圆心和半径的圆。圆被感兴趣矩形所裁剪。   
  357.         //若指定圆的颜色,可以使用宏 CV_RGB ( r, g, b )。  
  358.         cvCircle( image, pt1, cvRandInt(&rng)%300, random_color(&rng),  
  359.             cvRandInt(&rng)%10-1, line_type, 0 );  
  360.         cvShowImage(wndname,image);  
  361.         cvWaitKey(DELAY);  
  362.     }  
  363.     for (i = 1; i< NUMBER; i++)  
  364.     {  
  365.         pt1.x=cvRandInt(&rng) % width3 - width;  
  366.         pt1.y=cvRandInt(&rng) % height3 - height;  
  367.         //InitFont  
  368.         //初始化字体结构体。  
  369.         //void cvInitFont( CvFont* font, int font_face, double hscale,  
  370.         //                 double vscale, double shear=0,  
  371.         //                 int thickness=1, int line_type=8 );  
  372.         //font  
  373.         //被初始化的字体结构体。  
  374.         //font_face  
  375.         //字体名称标识符。只是Hershey 字体集( http://sources.isc.org/utils/misc/hershey-font.txt )的一个子集得到支持。  
  376.         //CV_FONT_HERSHEY_SIMPLEX - 正常大小无衬线字体。  
  377.         //CV_FONT_HERSHEY_PLAIN - 小号无衬线字体。  
  378.         //CV_FONT_HERSHEY_DUPLEX - 正常大小无衬线字体。( 比CV_FONT_HERSHEY_SIMPLEX更复杂)  
  379.         //CV_FONT_HERSHEY_COMPLEX - 正常大小有衬线字体。  
  380.         //CV_FONT_HERSHEY_TRIPLEX - 正常大小有衬线字体 ( 比CV_FONT_HERSHEY_COMPLEX更复杂)  
  381.         //CV_FONT_HERSHEY_COMPLEX_SMALL - CV_FONT_HERSHEY_COMPLEX 的小译本。  
  382.         //CV_FONT_HERSHEY_SCRIPT_SIMPLEX - 手写风格字体。  
  383.         //CV_FONT_HERSHEY_SCRIPT_COMPLEX - 比CV_FONT_HERSHEY_SCRIPT_SIMPLEX更复杂。  
  384.         //这个参数能够由一个值和可选择的CV_FONT_ITALIC字体标记合成,就是斜体字。  
  385.         //hscale  
  386.         //字体宽度。如果等于1.0f,字符的宽度是最初的字体宽度。如果等于0.5f,字符的宽度是最初的字体宽度的一半。  
  387.         //vscale  
  388.         //字体高度。如果等于1.0f,字符的高度是最初的字体高度。如果等于0.5f,字符的高度是最初的字体高度的一半。  
  389.         //shear  
  390.         //字体的斜度。当值为0时 ,字符不倾斜;当值为1.0f时,字体倾斜≈45度,等等。厚度让字母着重显示。函数cvLine用于绘制字母。  
  391.         //thickness  
  392.         //字体笔划的粗细程度。  
  393.         //line_type  
  394.         //字体笔划的类型,参见cvLine。  
  395.         //函数cvInitFont初始化字体结构体,字体结构体可以被传递到文字显示函数中。  
  396.         cvInitFont( &font, cvRandInt(&rng) % 8,  
  397.             (cvRandInt(&rng)%100)*0.05+0.1,  
  398.             (cvRandInt(&rng)%100)*0.05+0.1,   
  399.             (cvRandInt(&rng)%5)*0.1, cvRound(cvRandInt(&rng)%10),   
  400.             line_type );  
  401.         //PutText  
  402.         //在图像中显示文本字符串。  
  403.         //void cvPutText( CvArr* img, const char* text, CvPoint org, const CvFont* font, CvScalar color );  
  404.         //img  
  405.         //输入图像。  
  406.         //text  
  407.         //要显示的字符串。  
  408.         //org  
  409.         //第一个字符左下角的坐标。  
  410.         //font  
  411.         //字体结构体。  
  412.         //color  
  413.         //文本的字体颜色。  
  414.         //函数cvPutText将具有指定字体的和指定颜色的文本加载到图像中。  
  415.         //加载到图像中的文本被感兴趣的矩形框(ROI rectangle)剪切。  
  416.         //不属于指定字体库的字符用矩形字符替代显示。   
  417.         cvPutText( image, "Testing text rendering!", pt1, &font, random_color(&rng));  
  418.         cvShowImage(wndname,image);  
  419.         cvWaitKey(DELAY);  
  420.     }  
  421.     cvInitFont( &font, CV_FONT_HERSHEY_COMPLEX, 3, 3, 0.0, 5, line_type );  
  422.     //GetTextSize  
  423.     //获得字符串的宽度和高度。  
  424.     //void cvGetTextSize( const char* text_string, const CvFont* font, CvSize* text_size, int* baseline );  
  425.     //font  
  426.     //字体结构体  
  427.     //text_string  
  428.     //输入字符串。  
  429.     //text_size  
  430.     //合成字符串的字符的大小。文本的高度不包括基线以下的部分。  
  431.     //baseline  
  432.     //相对于文字最底部点的基线的Y坐标。  
  433.     //函数cvGetTextSize是用于在指定字体时计算字符串的绑定区域(binding rectangle)。  
  434.     cvGetTextSize( "I LOVE  GuaGua!", &font, &text_size, &ymin );  
  435.     pt1.x = (width - text_size.width)/2;  
  436.     pt1.y = (height + text_size.height)/2;  
  437.     //  CloneImage  
  438.     //制作图像的完整拷贝  
  439.     //IplImage* cvCloneImage( const IplImage* image );  
  440.     //image   
  441.     //原图像.  
  442.     //函数 cvCloneImage 制作图像的完整拷贝包括头、ROI和数据  
  443.     image2 = cvCloneImage(image);  
  444.     for( i = 0; i < 255; i++ )  
  445.     {  
  446.         //SubS  
  447.         //计算数组和数量之间的差  
  448.         //void cvSubS( const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL );  
  449.         //src  
  450.         //原数组.  
  451.         //value  
  452.         //被减的数量.  
  453.         //dst  
  454.         //输出数组.  
  455.         //mask  
  456.         //操作覆盖面( 8-bit 单通道数组); 只有覆盖面指定的输出数组被修改  
  457.         //函数 cvSubS 从原数组的每个元素中减去一个数量:  
  458.         //dst(I)=src(I)-value if mask(I)!=0  
  459.         //除覆盖面外所有数组都必须有相同的类型,相同的大小(或ROI大小)。  
  460.         //===============================================================  
  461.         //cvScalarAll()  
  462.         //四个纯量都是同一个输入的数字,通常为灰阶的形态  
  463.         //cvScalarAll(输入全部纯量值的数据)  
  464.         cvSubS( image2, cvScalarAll(i), image, 0 );  
  465.         cvPutText( image, "I LOVE  GuaGua!", pt1, &font, CV_RGB(255,i,i));  
  466.         cvShowImage(wndname,image);  
  467.         cvWaitKey(DELAY);  
  468.     }  
  469.     // Wait for a key stroke; the same function arranges events processing  
  470.     cvWaitKey(0);  
  471.     cvReleaseImage(ℑ);  
  472.     cvReleaseImage(&image2);  
  473.     cvDestroyWindow(wndname);  
  474.     return 0;  
  475. }  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值