练习:创建一个大小为100*100的三通道RGB图像。将它的元素全部置0.使用指针算法以(20,5)与(40,20)为顶点绘制一个绿色平面。

参考博文:blog.csdn.net/qq_20777367/article/details/46365191

使用指针算法首先要知道画布的指针,然后取得要修改位置的指针。即img->imageData+top*img->widthStep+left*nchannels+channel.

首先我们要清楚图像色素的存储是以元素为单位的,而元素内有多少个通道,一个元素就有多少个指针。所以每一行的元素数为left,则指针数为left*nchannels

Img->imageData是图像元素的初始位置,由于每一行的指针数为img->widthsteps,所以如果起始点上面的行数为top,一共含有的指针就是top*(img->widthStep)。而起始元素左边的元素数为left,每个元素有nchannels个通道,则一共有left*nchannels个指针。而如果我们要操作的是该元素的第channel个指针,就要再加上channel.

 /*ch4_lx3_4.cpp
添加功能:利用指针画矩形
本程序是learning opencv这本书的课后习题练习
欢迎提出问题一起讨论*/
#include "cv.h"
#include "highgui.h"
int main(int argc,char** argv) { IplImage *img = cvCreateImage(cvSize(, ), IPL_DEPTH_8U, ); cvZero(img); int widthstep = img->widthStep; int left = , width = , top = , height = ; uchar *ptr = (uchar*)(img->imageData+top*widthstep+left*); //指向要操作的指针 for (int j = ; j < height; j++) for (int i = ; i < width; i++) { *(ptr + j*widthstep + i*) = ;//由于每个元素含三个指针,所以需要加i*3才能指向下一个元素的该色素 } cvNamedWindow("img", ); cvShowImage("img", img); cvWaitKey(); return ; }

运行结果如下图

最新文章

  1. 龙之谷手游WebVR技术分享
  2. ios block中引用self
  3. HTML中div以及span等元素获取焦点
  4. windows下安装多个tomcat服务
  5. 查看、关闭某一runlevel下自动启动的服务
  6. JAVA基础知识之多线程——线程通信
  7. sublime_text3 用户配置
  8. 【转载】如何在C语言中调用shell命令
  9. python--while循环
  10. Java_.jar .war .ear 详解
  11. INSTEAD OF触发器
  12. javascript倒计时调转页面
  13. 2018-02-24 项目/教程中使用母语命名的&quot;问题&quot;
  14. 51行代码实现简单的PHP区块链
  15. LeetCode(40):组合总和 II
  16. About the test in development
  17. C++ socket网络爬虫(1)
  18. uC/OS-II 函数之时间相关函数
  19. [计算机网络-应用层] HTTP协议
  20. 【刷题】BZOJ 4516 [Sdoi2016]生成魔咒

热门文章

  1. python带参装饰器的改良版
  2. [原]反编译unity3d发布apk
  3. MsChart,饼状图
  4. orcle时间
  5. Apache性能优化总结
  6. Nginx 防盗链
  7. Linux ab 命令
  8. WF的初步学习与创建
  9. Cufon在渲染网页字体你不知道的事
  10. 【cs229-Lecture9】经验风险最小化