练习:创建一个1000*1000的三通道图像,将其元素所有置0。以(200,50)和(400,200)为顶点绘制一个绿色平面

我们能够用两种方法来实现这一功能,一个是使用cvPtr2D,可是因为使用了函数,会使程序的效率变低。合适的方法是使用指针直接改变色素的值。

方法一:使用cvPtr2D

CvPtr2D可以依据參数中的行和列读取该位置的元素。可是该元素包括三个指针,分别控制蓝绿红。CvPtr2D指向的是元素的第一个指针,而该元素其它的颜色指针则为cvPtr2D(img,top,left)+1或+2

#include "stdafx.h"

#include "highgui.h"

int _tmain(int argc, _TCHAR* argv[])

{

IplImage *img = cvCreateImage(cvSize(1000,1000), IPL_DEPTH_8U, 3);

cvZero(img);//将图像结构内全部元素置为0

int left = 200, right = 400, top = 50, bottom = 200;

for (; top < bottom; top++)

{

for (; left<right;left++)

{

*(cvPtr2D(img,top,left)+1)=255;//第二个參数,是控制大调整的,在这里即标明处于第几行。而第三个控制小调整,即控制处于该行的哪一列。

}

left = 200;        //在进行过一次上面的循环后,left已经加到了400,我们须要将它恢复初值。

}

cvNamedWindow("test", 1);

cvShowImage("test", img);

cvWaitKey(0);

return 0;

}

方法二:使用指针算法

使用指针算法首先要知道画布的指针,然后取得要改动位置的指针。即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.

#include "stdafx.h"

#include "highgui.h"

int _tmain(int argc, _TCHAR* argv[])

{

IplImage *img = cvCreateImage(cvSize(1000, 1000), IPL_DEPTH_8U, 3);

cvZero(img);

int widthstep = img->widthStep;

int left = 200, width = 200, top = 50, height = 150;

uchar *ptr = (uchar*)(img->imageData+top*widthstep+left*3); //指向要操作的指针

for (int j = 0; j < height; j++)

for (int i = 0; i < width; i++)

{

*(ptr + j*widthstep + i*3) = 255;//因为每一个元素含三个指针,所以须要加i*3才干指向下一个元素的该色素

}

cvNamedWindow("test", 1);

cvShowImage("test", img);

cvWaitKey(0);

return 0;

}

OpenCV学习笔记09--通过cvPtr2D或指针算法绘制图形的更多相关文章

  1. opencv学习笔记(七)SVM+HOG

    opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...

  2. opencv学习笔记(五)镜像对称

    opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...

  3. opencv学习笔记(一)IplImage, CvMat, Mat 的关系

    opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...

  4. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

  5. OpenCV学习笔记之课后习题练习3-5

    OpenCV学习笔记之课后习题练习2-5 练习使用感兴趣区域(ROI).创建一个210*210的单通道图像并将其归0.在图像中使用ROI和cvSet()建立一个增长如金字塔状的数组. 参考博文:www ...

  6. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  7. 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整

    今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...

  8. 【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  9. opencv学习笔记D01

    目录 opencv学习笔记D01 一.图片读取 二.图片保存 三.图片展示 四.图片缩放 五.四种常用插值方式的比较 1.最近邻插值 2.双线性插值 3.区域插值 4.三次样条插值 我是尾巴: ope ...

随机推荐

  1. 优动漫PAINT-百褶裙绘制教程

    不论是萌系水手服还是洋气学院风,一定少不了百褶裙的绘制.不同的群褶,会呈现不同的视觉效果.裙褶的结构在舒展和重叠的时候也存在不一样的绘制技巧.让我们一起通过这篇教程,看看百褶裙是如何绘制的吧~ 作者: ...

  2. 数字游戏(string的sort的应用)

    题目描述 牛牛举办了一场数字游戏,有n个玩家参加这个游戏,游戏开始每个玩家选定一个数,然后将这个数写在纸上(十进制数,无前缀零),然后接下来对于每一个数字将其数位按照非递减顺序排列,得到新的数,新数的 ...

  3. 紫书 例题8-5 UVa11054(等价转换)

    这道题用到了等价转换的思想 所有要运到a1的酒, 都要经过a2, 所以不如把a2的值改成a1+a2,然后依次以此类推. #include<cstdio> #include<cmath ...

  4. gRPC全局异常捕获

    gRPC全局异常捕获 引 一般的.net项目比如ASP.NET.控制台程序.Windows服务.桌面程序等都会有framework自带的全局异常捕获机制.ASP.NET的ExceptionFilter ...

  5. Docker学习总结(11)——八个Docker的真实应用场景

    [编者的话]Flux 7介绍了常用的8个Docker的真实使用场景,分别是简化配置.代码流水线管理.提高开发效率.隔离应用.整合服务器.调试能力.多租户环境.快速部署.我们一直在谈Docker,Doc ...

  6. Linux shell 内部变量

    1 TMOUT 来自bash的解释: If set to a value greater than zero, TMOUT is treated as the default timeout for ...

  7. jeesite 简介

    jeesite 简介 https://github.com/thinkgem/jeesite http://jeesite.com/

  8. [MST] Attach Behavior to mobx-state-tree Models Using Actions

    Models are not just a nifty feature for type checking. They enable you to attach behavior to your ac ...

  9. MAVEN自己主动部署到tomcat

    前面几篇文章maven生成的war包都是手动部署到tomcat,显然这样是非常麻烦的.那么这一篇文章就来介绍一个怎样使用maven高速自己主动的部署项目到tomcat容器中. 1.首先我们须要配置to ...

  10. elasticsearch中的几个概念总结

    1.Geo spatial search : 地理空间搜索,可以在搜索查询中指定的某一距离内查找所要的内容.也可以返回以当前为圆心,逐渐添加圆的半径.直到找到所匹配到的内容. 參考:http://ww ...