看到网上很多人使用
CvMat * Mdata; Mdata= cvCreateMat(100,100,CV_8UC3); //将矩阵数据赋值为0; cvZero(Mdata); //pData指针指向中间通道 uchar * pData = cvPtr2D(Mdata,1,0,NULL); |
这个程序段来访问图像的中间通道。不解cvPtr2D函数中的第二,三个参数值分别取1,0 怎么就是指向中间通道?!
我认为它只是指向坐标(1,0)元素的第一个通道,cvPtr2D( )函数返回一个指向所需元素的指针,那么第二通道的访问代码应该是
CvMat * Mdata; Mdata= cvCreateMat(100,100,CV_8UC3); //将矩阵数据赋值为0; cvZero(Mdata); //pData指针指向中间通道 uchar * pData = cvPtr2D(Mdata,i,j,NULL)+1; |
所以,对月题目:先定义一个数组,再使用函数cvPtr2D()将指针指向中间的通道(“绿色”),以给定的两个点画一个绿色的长方形的程序应该为:
#include "cv.h" #include "highgui.h" int main(int argc, char** argv){ IplImage *img; img = cvCreateImage(cvSize(100,100),IPL_DEPTH_8U,3); cvZero(img); //uchar* pData = cvPtr2D(img,1,0,NULL); //cvRectangle(img,cvPoint(20,5),cvPoint(40,20),cvScalar(0,255,0),1); int left = 20,top=5,right=40,bottom = 20; for( ;left<=right;left++) { *(cvPtr2D(img,left,top,NULL)+1)=255; *(cvPtr2D(img,left,bottom,NULL)+1)=255; } left=20; for( ;top<=bottom;top++) { *(cvPtr2D(img,left,top,NULL)+1)=255; *(cvPtr2D(img,right,top,NULL)+1)=255; } cvNamedWindow("source",CV_WINDOW_AUTOSIZE); cvShowImage("source",img); cvWaitKey(0); cvReleaseImage(&img); cvDestroyWindow("source"); }
被注解掉的部分则是典型的错误答案。
相关推荐
**指针函数**是指返回值类型为指针的函数,也就是说,这个函数执行完毕后会返回一个指针,该指针可以指向任何数据类型。指针函数的定义格式如下: ``` 类型标识符 *函数名(参数表) ``` 例如: ```c int *f(int x, ...
函数指针是一个指向函数的指针变量,它存储了函数的入口地址。当我们声明一个函数指针时,需要指定它所指向的函数的类型。例如,`void (*func)()` 是一个无参数且无返回值的函数指针。在给定的示例中: ```c int (*...
3. **typedef简化函数指针**:为了简化函数指针的使用,可以使用`typedef`创建一个别名,使得声明和使用函数指针更加直观。例如,我们可以定义一个类型`FP`,它代表了某个特定签名的函数指针,然后用这个别名来声明...
例如,我们定义一个函数`int add(int a, int b)`,然后声明一个函数指针类型`int (*func_ptr)(int, int)`,最后将`add`函数的地址赋值给这个函数指针,像这样:`func_ptr = &add;`。之后,我们可以通过`(*func_ptr)...
在Keil C51中,函数指针的使用可以分为三种情况:指向固定地址的指针、无参数的函数指针和带参数的函数指针。 首先,指向固定地址的指针可以通过如下代码实现: ```c int main(void) { ( (void (*)(void)) 0x2000...
**函数指针**指的是指向函数的指针变量,它存储的是函数的入口地址。当我们想要在运行时动态地选择调用哪个函数时,函数指针就显得非常有用。例如,我们可以将函数指针作为参数传递给其他函数,这样可以在运行时决定...
题目中的另一个示例展示了如何使用函数指针: ```cpp #include "stdio.h" int max(int x, int y) { return (x > y ? x : y); } int main() { int (*ptr)(); int a, b, c; ptr = max; // 将max函数的地址赋给...
函数指针是指向函数的指针,它可以用来存放函数的地址,并且可以通过函数指针来调用函数。函数指针的定义方式与数组指针类似,但函数指针的类型是指向函数的类型。 2. 回忆函数 回忆一下我们之前说的函数,写一个...
函数指针最直观的应用之一是将其作为普通变量使用,可以存储函数地址,随后通过该指针调用函数。例如: ```cpp int(*fp)(int a); fp = test; // 将函数test的地址赋给函数指针fp cout (5) |" (*fp)(10) ; ``` 这里...
在使用函数指针时,需要注意函数指针和它指向的函数的参数个数和类型必须是一致的,同时函数指针的类型和函数的返回值类型也必须是一致的。 函数指针的应用非常广泛,例如在回调函数、事件处理、函数式编程等领域都...
在C语言中,函数指针可以分为两类:一种是指向普通函数的指针,另一种是指向成员函数的指针。指向普通函数的指针可以直接调用该函数,而指向成员函数的指针需要通过对象来调用成员函数。 Void指针是C语言中的一种...
已知每个函数在编译的时候,系统会分配给函数一个入口地址,函数名表示这个入口地址,定义指向函数的指针变量称之为函数的指针变量。 函数返回值可以是 int char float等,当然也可以是地址值,那么函数返回值是地址...
详细介绍了指向函数的指针 是如何实现的。
例如,我们可以定义一个通用的回调函数接口,让所有继承自该接口的类都提供一个特定签名的纯虚函数,然后使用指向这个接口的指针来调用不同类的成员函数。 ```cpp class CallbackInterface { public: virtual ~...
- 将参数封装进结构体中,然后将指向该结构体的指针作为参数传递给函数指针。 - 使用`reentrant`关键字将函数声明为可重入函数,这样可以在函数内部处理更多的参数。 #### 分析调用树正确使用指针函数 Keil C51...
在声明了函数指针后,我们需要将函数的地址赋给该指针,然后才能通过该指针来调用函数。例如: ```c int add(int x, int y) { return x + y; } int main() { int (*func_ptr)(int, int) = add; // 函数指针赋值 ...
详细剖析:指针函数、函数指针、指针数组、数组指针、双重指针、指针与动态内存分配 个人总结要点: 本质: 地址要用指针来存储,指针是用来存储地址的!!! 重难点: 指针指向的地址,也就是指针存储的地址!!...
### 函数指针与指针函数详解 在深入探讨函数指针与指针函数之前,我们首先需要理解几个基础概念:变量、数组、指针以及它们之间的关系。 #### 变量与指针 变量是在内存中分配的一个存储区域,用于存放特定类型的...
然后使用`typedef`定义了一个指向`CA`类成员函数的指针类型`PTRMEMFUN`,并通过成员函数指针`pMemFun`调用了`lcFun`函数。 #### 五、总结 通过本文档的学习,我们可以了解到函数指针的基本概念以及其在C++中的应用...