在VS中怎么用vb画矩形_(十四)矩形和操作展示逻辑操作

037741bac5a6532a3ec0c4fadb644996.png

时间为友,记录点滴。

聊了这么多的图片运算,忽然有个想法,为什么非要用静态的图片来展示运算呢?我们可以用自己做的图片来经过运算后显示出来。说干就干。


先想一下需求:

  1. 整体环境非黑即白。
  2. 可以用鼠标在背景上画出矩形,矩形内容要填充成反色。
  3. 可以通过鼠标画的矩形展示图片的逻辑操作。

好就这吧,怎么而实现呢?老规矩,大象放冰箱的三步走:

OpenCV中的矩形类实现

rect

创建一个矩形:rect(X0, Y0, width, height), X0/Y0代表矩形的起点,width, height代表矩形的宽和高。这四个变量就把矩形的位置和大小限定了。

  • area(): 面积
  • size(): 尺寸,及[width, height]
  • tl(): 左上顶点坐标
  • br(): 右下顶点坐标
  • width(): 宽度
  • heigth(): 高度
  • contains(Point(x, y)): 是否包含Point点
  • &: rect = rect1 & rect2; 求两个矩形的交集
  • | : rect = rect1 | rect2; 求两个矩形的并集
  • ==: rect1 == rect2; 判断两个矩形是否相等
  • 平移:rect = rect + Point(x, y); 其实就是对左上顶点坐标做加法
  • 缩放:rect = rect + Size(x, y);其实就是对width和height做加法。
rectangle
void 
  • img: 可以认为是Mat 类型的Image.
  • pt1: 矩形的一个顶点,比如:rect.tl
  • pt2:矩形的pt1的对立顶点,比如:rect.br
  • color: 矩形的颜色值或者灰度值。
  • thickness: 是否需要填充 thickness>0?不填充:填充
  • lineType: 线的类型,参考LineTypes
  • shift Number of fractional bits in the point coordinates.

OpenCV中的鼠标实现画矩形

鼠标先知道一个函数就够了

void 
  • winname:窗口的名字
  • onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。 这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags, void* param);
  • userdate:传给回调函数的参数
void 
  • event: CV_EVENT_*变量之一

常见的event:

cv2_EVENT_MOUSEMOVE 鼠标滑动
cv2_EVENT_LBUTTONDOWN 左键点击
cv2_EVENT_RBUTTONDOWN 右键点击
cv2_EVENT_MBUTTONDOWN 中间点击
cv2_EVENT_LBUTTONUP 左键释放
cv2_EVENT_RBUTTONUP 右键释放
cv2_EVENT_MBUTTONUP 中间释放
cv2_EVENT_LBUTTONDBLCLK 左键双击
cv2_EVENT_RBUTTONDBLCLK 右键双击
cv2_EVENT_MBUTTONDBLCLK 中间双击
  • x/y: 鼠标指针在图像坐标系的坐标(不是窗口坐标系)
  • flags: CV_EVENT_FLAG的组合, param是用户定义的传递到setMouseCallback函数调用的参数。
cv2_EVENT_FLAG_LBUTTON 左键拖拽
cv2_EVENT_FLAG_RBUTTON 右键拖拽

OpenCV中的图片逻辑操作

//逻辑运算:

好了,完成了构思,和基本的概念,coding。。。

第一步:先实现一个矩形类,并且把它画出来,看看基本的&|操作是否有用。

static 

打印输出:

5423ef98aa75fa16b5dbb45c7ed1a9d5.png
矩形的一些属性

c1e6343ed36a722d783140d3acde9220.png
图片输出的是test1 & test2

第二步:构造鼠标操作

注意点:

  1. 为了实现实时更新矩形,需要在while(1)的线程和callback函数中对矩形做动态调整。
  2. Not/And/Or的操作分别在“EVENT_LBUTTONUP” “EVENT_LBUTTONDOWN”时有操作的不同。
#include 

运行结果:

0417f16cc61aced3ddd6af97e4decfbf.png
四个弹窗:log输出;&运算、|运算、非运算

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux文件传输到另一台linux,使用scp将文件/目录拷贝到另一台Linux主机上

如何将一台Linux主机上的文件或目录拷贝到另一台Linux主机上,scp命令可以实现该需求前提条件:两台Linux主机处于同一网段,可以互相ping通操作如下:文件拷贝①将本地文件拷贝到远端主机上scp 待拷贝的文件 远端主机用户名远端主机I…

python结构化数据_python新手入门必备—— 使用json保存结构化数据

【摘要】使用 json 保存结构化数据时,字符串可以很轻松地写入文件并从文件中读取出来。数字可能会费点劲,因为 read() 方法只能返回字符串,这些字符串必须传递给类似 int() 的函数,它会接受类似 123 这样的字符串并返回其数字值 1…

c++ 二维数组 排序_漫画:“排序算法” 大总结

​冒泡排序:漫画:什么是冒泡排序?​mp.weixin.qq.com选择排序:漫画:什么是选择排序?​mp.weixin.qq.com插入排序:漫画:什么是插入排序?​mp.weixin.qq.com此外还有冒泡排…

c语言线程经常段错误的是,由pthread_create引起的段异常

由pthread_create引起的段错误一般线程的结束是由进程内的其他线程来结束的,调用pthread_cancel.但是需要考虑到被结束线程的性质,一方面,线程是可被结束,也可无法结束,即不响应该信号;另一方面&#xff0c…

python request url编码_Python 爬虫 (requests) 发送中文编码的 HTTP POST 请求

向往常一样发送POST请求出现错误网站信息表单页面结果网页使用 gb2312 编码使用 requests 发送 post 请求In [2]: import requestsIn [3]: from bs4 import BeautifulSoup as BSIn [4]: url http://example.com/ip/search.aspIn [5]: data {...: loudong: 女生九栋,...: fang…

python坐标定位_如何利用Python识别并定位图片中某一个色块的坐标?

依赖python包|opencv、numpy、aircv 第一步:查找图片在原始图片上的坐标点 import aircv as ac def matchImg(imgsrc,imgobj,confidencevalue0.5):#imgsrc原始图像,imgobj待查找的图片 imsrc ac.imread(imgsrc) imobj ac.imread(imgobj) match_result …

centos7打开图形界面命令_centos7标准版(DVD)命令界面和图形界面相互切换

1、root登陆终端2、输入命令 vi /etc/inittab ,查看两种界面的启动模式:vi /etc/inittab3、退出vi模式,,输入命令systemctl get-default 查看当前系统启动模式;我的是命令界面模式为:multi-user.target;4、…

为什么编程语言要从c语言学起,在那么多编程语言中,为什么推荐初学者学 C 语言?...

如果你学过了计蒜客的《编程初学入门常识》的课,你就会知道,一个汇编写的操作系统,是没有办法在不同的计算机上普适使用的。所以呢,Ken 和 Dennis 为了让更多人在非 PDP-7 小型机的计算机上也玩上《星际旅行》的游戏,决…

ieee39节点系统介绍_Java秒杀系统实战系列-基于ZooKeeper的分布式锁优化秒杀逻辑...

本文是“Java秒杀系统实战系列文章”的第十六篇,本文我们将继续秒杀系统的优化之路,采用统一协调调度中心中间件ZooKeeper控制秒杀系统中高并发多线程对于共享资源~代码块的并发访问所出现的并发安全问题,即用ZooKeeper实现一种分布式锁&…

curl shell 失败_linux – curl命令不在bash中通过shell脚本执行

我正在学习shell脚本!同样我尝试在ubuntu终端上使用curl下载facebook页面.t.sh内容vivi-Dell-7537(Desktop) $cat t.shcurlCmd"curl \"https://www.facebook.com/vivekkumar27june88\""echo $curlCmd($curlCmd) > ~/Desktop/fb.html运行脚本…

centos配置c语言环境变量,CentOS7设置环境变量

一、环境变量的概念1、环境变量的含义程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的。2、环境变量的分类1)按生效的范围分类。系统环境变量:公共的,对全部的用户都生效。用户环境变量:用户私…

python 3.7.732位安装步骤_Python3.7安装pyaudio教程解析

本人笔记本电脑安装的是 python3.7, 64位操作系统,基于x64的处理器 因为 pyaudio 暂时不支持 python3.7 和 3.8,所以若需要安装 pyaudio 需要下载 whl 文件后再离线进行安装。 首先:下载安装 pyaudio 的 whl 文件 然后按下 ctrlf 输入关键字&…

java语言程序设计是c语言吗,浅析C语言和Java语言的异同.pdf

新一代信息技 m0 l0、… … … …浅析C语言和Java语言的异同张亚荣(通辽职业学院信息技术系,内蒙古通辽 028000)【摘 要l文章根据本人多年对c语言和Java语言教学过程中遇到的一些实际问题,诸如Java语言是不是c语言发展和衍生的产物等。基于此&#xff0c…

python搜论文_python论文

浅谈我眼中的 python 吴凡 摘要: 作为一门非常有潜力的高级语言, python 正在编程上发挥着越来越大的作用。这学期,通 过对 python 基础知识的学习,对 python 有了一定的认识。同时和已经学习的高级语言 C 和 C 有了一定的对比&am…

图书管理系统c语言报告调试分析,图书管理系统C语言程序设计实验分析报告.doc...

图书管理系统C语言程序设计实验分析报告C语言程序设计实验报告系别专业班级姓名学号时间实验题目 图书信息管理系统一、实验目的(1)熟练掌握C语言的相关操作。(2)综合应用C语言的知识,独立完成一个完整的系统,提高编程能力,体会软件程序的开发…

python open写入_Python3 open() 函数详解 读取文件写入文件追加文件二进制文件

Python3 open() 函数详解 读取文件写入文件追加文件二进制文件 open()函数的主要作用是打开文件并返回相应文件对象,使用文件对象可以对当前文件进行读取、写入、追加等操作,默认情况下"r"模式,文件不存在的话会发生OSError错误的。…

python deepcopy报错_python 字典对象赋值之deepcopy遭遇的问题及解决过程(lxml惹的祸)...

今天在写一段代码的时候,需要对字典进行传值操作。一般情况下字典a 字典b,意味着是传引用,b发送改变的情况下a也会发生改变。我的字典如下a{testcase: {attributes: {classname: testdemo, circles: 2, casecode: case02, description: u/u6…

c语言printf函数很长时间,C语言学习之printf()函数特别注意事项

https://m.toutiao.com/is/eLAopLB/做为C语言程序的输出函数printf()在使用时除了其正常的使用之外,还有特别要注意的地方:1、在函数里面,基本上只有三种字符,一种为格式字符,最常见的有%d(十进制整数),%f(浮点数形式)…

python的三种结构_Python控制结构,python

比较运算符 布尔类型 布尔值有两个:True和False 例1: a True a 例2: 2 3 提示: 1.不要把赋值(一个等号)与比较(两个等号)混淆。 2.Python是区分大小写的,所以True与tru…

机器人 知乎碧桂园_万亿负债之下,碧桂园启动人事调整

原标题:万亿负债之下,碧桂园启动人事调整疫情之下,各行各业如履薄冰。作为资金密集型和人员密集型行业,房地产业头顶本就悬着一把「房主不炒」的达摩克里斯之剑,现在又面临销售阻遏,受到的冲击尤其大&#…