OpenCV学习笔记之课后习题练习3-4
2024-08-28 10:08:02
练习:创建一个大小为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 ; }
运行结果如下图
最新文章
- 龙之谷手游WebVR技术分享
- ios block中引用self
- HTML中div以及span等元素获取焦点
- windows下安装多个tomcat服务
- 查看、关闭某一runlevel下自动启动的服务
- JAVA基础知识之多线程——线程通信
- sublime_text3 用户配置
- 【转载】如何在C语言中调用shell命令
- python--while循环
- Java_.jar .war .ear 详解
- INSTEAD OF触发器
- javascript倒计时调转页面
- 2018-02-24 项目/教程中使用母语命名的";问题";
- 51行代码实现简单的PHP区块链
- LeetCode(40):组合总和 II
- About the test in development
- C++ socket网络爬虫(1)
- uC/OS-II 函数之时间相关函数
- [计算机网络-应用层] HTTP协议
- 【刷题】BZOJ 4516 [Sdoi2016]生成魔咒