这是一个很有意思的题目,通过这个题我们可以理解图形的内部存储和cvPtr*D函数族的使用方法。

简单来说,图像就是矩阵,在一般的图像中,每个像素中存储了3个变量,分别代表BGR三通道的值,cvPtr*D函数族就是帮助我们快速定位到矩阵中的每个像素点,如本题,我们希望从起始点开始绘制矩形,于是我将从cvPtr2D的参数设置为(left,top)也就是(20,5)。于是函数马上返回一个指针指向那个像素点的第一个变量,也就是蓝色通道的值,由于我们需要的是绿色通道,所以将指针加1让他指向绿色通道的值。

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"int main(int argc, char** argv)
{IplImage *img;img = cvCreateImage(cvSize(200, 200), IPL_DEPTH_8U, 3);cvZero(img);int right = 40, bottom = 20, top = 5, left = 20;for (; top <= bottom; top++){*(cvPtr2D(img, left, top, NULL) + 1) = 255;*(cvPtr2D(img, right, top, NULL) + 1) = 255;}top = 5;for (; left <= right; left++){*(cvPtr2D(img, left, top, NULL) + 1) = 255;*(cvPtr2D(img, left, bottom, NULL) + 1) = 255;}cvNamedWindow("test", CV_WINDOW_AUTOSIZE);cvShowImage("test", img);cvWaitKey();return 0;
}

结果显示的图像是这样的:

是不是和我们想象中的不太一样?好像在纵向是20~40,横向是5~20。难道说在图像处理的时候,x轴是纵向而y轴是横向吗?我们再想想,cvPtr2D的参数是idx0和idx1,并不是所谓的横纵坐标,而是矩阵的下标,也就是说idx0是指行下标,idx1是指列下标,这下我们就明白了,x轴实际对应的是列,y轴对应的是行。

因此需要修改一下代码,如下:

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"int main(int argc, char** argv)
{IplImage *img;img = cvCreateImage(cvSize(200, 200), IPL_DEPTH_8U, 3);cvZero(img);int right = 40, bottom = 20, top = 5, left = 20;for (; top <= bottom; top++){*(cvPtr2D(img, top, left , NULL) + 1) = 255;*(cvPtr2D(img, top, right, NULL) + 1) = 255;}top = 5;for (; left <= right; left++){*(cvPtr2D(img, top, left, NULL) + 1) = 255;*(cvPtr2D(img, bottom, left, NULL) + 1) = 255;}cvNamedWindow("test", CV_WINDOW_AUTOSIZE);cvShowImage("test", img);cvWaitKey();return 0;
}

这样运行之后,会是下面的结果:

这下就没问题了~

转载于:https://www.cnblogs.com/sixfancy/p/3482680.html

《学习OpenCV》第三章习题 第3题相关推荐

  1. 已知函数func的C语言代码框架,第三章习题-ddg..doc

    第三章习题-ddg. 习 题 1. 给出以下概念的解释说明. 机器语言程序机器指令汇编语言 汇编指令汇编语言程序汇编助记符 汇编程序反汇编程序机器级程序 通用寄存器定点通用寄存器栈指针寄存器 指令指针 ...

  2. 算法竞赛入门经典(第二版)第三章习题

    声明:作者水平有限,只是会基础C语言的小菜,C++还未入门.作者仅根据算法竞赛入门经典(第二版)书上第三章习题所述题意而编写,并未严格按照原题的输入输出编写,代码仅经过个人测试(OJ网站太慢了).代码 ...

  3. 计算机组成原理译码器选择,计算机组成原理第三章习题参考解析.doc

    计算机组成原理第三章习题参考解析 第3章习题参考答案 1.设有一个具有20位地址和32位字长的存储器,问 (1) 该存储器能存储多少字节的信息? (2) 如果存储器由512K×8位SRAM芯片组成,需 ...

  4. 《Go语言圣经》学习笔记 第三章 基础数据类型

    <Go语言圣经>学习笔记 第三章 基础数据类型 目录 整型 浮点数 复数 布尔型 字符串 常量 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记, ...

  5. 机器人学中的状态估计 中文版_机器人学中的状态估计/State Estimation for Robotics—第三章习题答案...

    机器人学中的状态估计/State Estimation for Robotic 第三章习题答案 英文最新版已于2020年4月11日勘误此第二题,维度改为六维矩阵,即图片上的形式.

  6. 随机过程及其在金融领域中的应用 第三章 习题 及 答案

    随机过程及其在金融领域中的应用 第三章 习题 及 答案 本文地址: http://blog.csdn.net/caroline_wendy/article/details/16879515 包含: 1 ...

  7. 微型计算机技术第三版第三章答案,微型计算机原理与接口技术第三章习题及答案...

    第三章 习题及答案 2. DS=1000H, BX=0200H, SI=2, 内存10200H-10205H 单元的内容分别是10H, 2AH, 3CH, 46H, 59H, 6BH ,下列指令执行后 ...

  8. 设某微型计算机内存ram区,微机原理第三章习题.doc

    微机原理第三章习题 第四章 指令与寻址方式习题解答 1.试分别说明下列各指令中源操作数和目的操作数使用的寻址方式: (1) AND AX,0FFH (2) AND BL,[OFFH] (3) MOV ...

  9. 第三章 计算机网络技术,计算机网络技术第三章习题

    计算机网络技术第三章习题 1.网络协议是指网络数据交换而制定的规责.约定与标准的集合,它由______._______.________三部分组成 2.计算机网络采用_______的体系结构,网络中两 ...

最新文章

  1. 树上分块 - Successor HDU - 4366
  2. 关闭sql执行功能及找回08CMS系统管理员密码
  3. Ontheinternet的深圳论坛
  4. Php学习准备(环境)
  5. 【Oracle】lsnrctl reload 命令简介
  6. 209. 长度最小的子数组
  7. C++循环语句的效率
  8. 什么是计算机嵌套分类汇总,excel嵌套分类汇总 Excel表格中创建嵌套分类汇总和查看嵌套分类汇总明细的方法...
  9. idea打包jar程序
  10. react-hooks/exhaustive-deps警告
  11. Tangent Space的基向量计算方法
  12. 由三个点坐标判断三个点能否组成三角形模板(自用,客官可取)
  13. WINDOWS API编程乱叹
  14. ORB、SURF、SIFT特征点提取方法和ICP匹配方法
  15. 【软件工程】第一、二章总结
  16. 华为手机如何调时间显示_华为手机如何设置时间没有显示
  17. GitLab基础:备份与恢复指南
  18. rarlinux(rar\unrar在linux使用)
  19. ipaddress 模块介绍
  20. Python实现 IOT(物联网) 自动化测试

热门文章

  1. python中的随机函数怎么用_Python中随机数的使用方法有那些?
  2. python最新版本 效率_Python:迭代列表与dict项目效率
  3. myeclipse搭建php,MyEclipse常用配置图文教程
  4. 清华 词向量库_word2vec 构建中文词向量
  5. Python:python中的可变类型和不可变类型
  6. ladar:16线激光雷达(雷神)
  7. LabVIEW实现应用程序停止或退出
  8. Python Qt GUI设计:窗口之间数据传递(拓展篇—5)
  9. 深度学习常用数据集资源(计算机视觉领域)
  10. 【机器视觉案例】(10) AI视觉搭积木,手势移动虚拟物体,附python完整代码