【python】OpenCV—Rectangle, Circle, Selective Search(1.2)

在这里插入图片描述

文章目录

  • 1 画框画圈
    • 1.1 画矩形框
    • 1.2 画圆 / 点
    • 1.3 椭圆
  • 2 Selective Search
  • 3 Resize

1 画框画圈

1.1 画矩形框

# Copy the image
img_rgb_copy = img_rgb.copy()

# Draw a rectangle
cv2.rectangle(img_rgb_copy, pt1 = (405, 90), pt2 =(740, 510),
              color = (255, 0, 0), thickness = 5)
plt.axis("off")
plt.imshow(img_rgb_copy)

pt1 是左上角坐标,pt2 是右下角坐标,坐标可以用电脑自带的画图工具获取,直接 copy 过来就行!

在这里插入图片描述


补充1:如果要画成 mask 块,也即全填充的形式,则把 thickness 参数设置为 -1 即可

补充2:如果要把区域裁剪出来,可以借助 numpy 的切片操作,例如

import cv2

img_pth = "/file2/yanmeng/human/ocean3_115/images/ocean_17_55034.jpg"
img = cv2.imread(img_pth)

box = (606, 182, 682, 360)  # (x0, y0, x1, y1)

crop_img = img[box[1]:box[3], box[0]:box[2]]  # [y0:y1, x0:x1]

cv2.imshow("1", img)
cv2.imshow("2", crop_img)
cv2.waitKey(10000)
cv2.destroyAllWindows() # 释放所有由 Opencv 创建的窗口

waitKey() 的参数为等待键盘触发的时间,单位为 ms,返回值为 -1(表示没有键被按下)或者 ASCII 码

在这里插入图片描述
在这里插入图片描述

复制 RoI 区域

import cv2
img = cv2.imread("1.jpg")
bag = img[840:1004, 830:1032]
img[840:1004, 830+200:1032+200] = bag
cv2.imwrite("2.jpg", img)

请添加图片描述
快乐加倍!!!

1.2 画圆 / 点

void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color,
               int thickness=1, int line_type=8, int shift=0 );
  • img:图像。
  • center:圆心坐标。
  • radius:圆形的半径。
  • color:线条的颜色。
    t- hickness:如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充。
  • line_type:线条的类型。见 cvLine 的描述
  • shift:圆心坐标点和半径值的小数点位数。
img_rgb_copy = img_rgb.copy()
# Draw a circle
cv2.circle(img_rgb_copy, center = (200, 280), radius =80,
           color = (0,0,255), thickness = 5)
plt.axis("off")
plt.imshow(img_rgb_copy)

在这里插入图片描述
一起画,哈哈哈,我也是周伯通了,左手画圆,右手画框!
在这里插入图片描述

1.3 椭圆

绘制椭圆
在这里插入图片描述

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = np.zeros((512,512,3),np.uint8)#生成一个空彩色图像
cv2.ellipse(img=img,
            center=(256,256),
            axes=(150,100),
            angle=30,
            startAngle=45,
            endAngle=180,
            color=(0,0,255),
            thickness=-1)
#注意最后一个参数-1,表示对图像进行填充,默认是不填充的,如果去掉,只有椭圆轮廓了
cv2.imshow("1", img)
cv2.waitKey(0)

在这里插入图片描述

2 Selective Search

RCNN 和 Fast RCNN 都用的是 SS,目前被主流的 Faster RCNN 的 Region Proposal Network 替代!我们重温下经典!

我用的 jupyter notebook,所以要克服下 opencv 的 cv2.imshow() 问题,参考
opencv如何在jupyter notebook中显示图片

import cv2
import matplotlib.pyplot as plt
if __name__ == '__main__':
    cv2.setUseOptimized(True);
    cv2.setNumThreads(4);

    # read image
    im = cv2.imread('/root/userfolder/Experiment/1.png')
    # resize image
    newHeight = 200
    newWidth = int(im.shape[1] * 200 / im.shape[0])
    im = cv2.resize(im, (newWidth, newHeight))
    
    #cv2.imshow("input", im)  
    # jupyter notebook 
    #img = im[:,:,::-1] # 必须为 ::-1
    #plt.imshow(im)


    # 创建算法+设置输入图像
    ss = cv2.ximgproc.segmentation.createSelectiveSearchSegmentation()
    ss.setBaseImage(im)

    # 使用SS快速版本
    ss.switchToSelectiveSearchFast()

    # 执行SS
    rects = ss.process()
    print('Total Number of Region Proposals: {}'.format(len(rects)))

    # 推荐100个ROI
    numShowRects = 100
    imOut = im.copy()

    # 显示前100个区域外接矩形框
    for i, rect in enumerate(rects):
        if i < numShowRects:
            x, y, w, h = rect
            cv2.rectangle(imOut, (x, y), (x + w, y + h), (0, 255, 0), 1, cv2.LINE_AA)
        else:
            break

    # show output
    """
    cv2.imshow("SS-Demo", imOut)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    """
    # jupyter notebook
    img = imOut[:,:,::-1] # 必须为 ::-1
    plt.xticks(())
    plt.yticks(())
    plt.imshow(img)

处理前
在这里插入图片描述
处理后
在这里插入图片描述

3 Resize

cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)
  • InputArray src:输入图片
  • OutputArray dst :输出图片
  • Size:输出图片尺寸——(w,h)
  • fx, fy:沿 x 轴,y 轴的缩放系数
  • interpolation:插入方式

在这里插入图片描述
来自 opencv: 图像缩放(cv2.resize)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

hash路由模式

hash模式 hash模式是一种把前端路由的路径用井号 # 拼接在浏览器 URL 后面的模式。 一个完整的 URL 包括&#xff1a;协议、域名、端口、虚拟目录、文件名、参数、锚。 https://www.wangyuegyq.top/utils/index.html?name123&phone123#home协议&#xff1a;https域名&am…

关于400G光模块的常见问题解答

最近在后台收到了很多用户咨询关于400G光模块的信息&#xff0c;那400G光模块作为当下主流的光模块类型&#xff0c;有哪些问题是备受关注的呢&#xff1f;下面来看看小易的详细解答&#xff01; 1、什么是400G QSFP-DD光模块&#xff1f; 答&#xff1a;400G光模块是指传输速…

《011.SpringBoot之餐厅点餐系统》

《011.SpringBoot之餐厅点餐系统》【界面简洁功能简单】 项目简介 需要源码及数据库的私信… [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;DEA jdk1.8 Maven MySQL 前后端分离; 后台&#xff1a;SpringBootMybatisPlus; 前台&#xff1a;Layuivue; …

如何批量在文件名中加标点符号?

如何批量在文件名中加标点符号&#xff1f;标点符号在文件名中的作用通常是用来分隔不同部分的内容&#xff0c;或者用来表示特定的含义。例如&#xff0c;下划线"_" 可以用来连接文件名的不同部分&#xff0c;使得文件名更易于阅读和理解。另外&#xff0c;使用连字…

苏宁API:一键搜索,海量商品任你选!

使用苏宁API按关键字搜索商品&#xff0c;可以在API的搜索参数中设置关键字。 例如&#xff0c;在搜索商品时&#xff0c;可以在API的请求参数中设置q关键字。例如&#xff0c;要搜索“鞋子”&#xff0c;可以将q设置为“鞋子”。 另外&#xff0c;还可以设置其他的搜索参数&…

九、Nacos集群搭建

Nacos集群搭建 1.集群结构图 官方给出的Nacos集群图&#xff1a; 其中包含3个nacos节点&#xff0c;然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。 我们计划的集群结构&#xff1a; 三个nacos节点的地址&#xff1a; 节点ipportnacos1192.168.150.18845n…

八、Nacos配置管理(统一配置管理、配置热更新、配置共享)

目录 一、新增配置 二、配置的获取 三、配置自动刷新 3、实现配置的热更新 方式一&#xff1a;在controller上添加注解&#xff0c;并重启服务 方式二&#xff1a;使用configuration注解 四、多环境配置共享 五、多环境配置优先级 一、新增配置 配置创建成功 二、配置的…

所有社区工作者!能救一个是一个

救命啊&#xff0c;这东西我怎么早不知道呢&#xff01; 社区人到年底了各种要写的东西很烦啊&#xff01;突然看到这个&#xff0c;真的救我大命了啊&#xff01; 谁懂啊&#xff1f;&#xff01;&#xff01;平时写个东西起码两三天&#xff0c;试了一下这东西&#xff01;…

CDR最新CorelDRAWX8安装步骤教程

CorelDRAW Graphics Suite非凡的设计能力广泛地应用于商标设计、标志制作、模型绘制、插图描画、排版及分色输出等等诸多领域。作为一个强大的绘图软件&#xff0c;它被喜爱的程度可用事实说明&#xff1a;用作商业设计和美术设计的PC机几乎都安装了 。CorelDRAW让您轻松应对创…

LeetCode(22)N 字形变换【数组/字符串】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; N 字形变换 1.题目 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时&#xff0c;排列如下&#xff1a; P A …

硬链接和软链接的区别

硬链接&#xff1a; 硬链接指向计数器&#xff0c;计数器指向原始文件&#xff0c;计数器标记使用的链接的数量 软链接&#xff1a; 软链接是指向硬链接的链接&#xff0c;软链接是绝对地址&#xff0c;软链接也叫符号链接&#xff1b;软链接创建后计数器的值不会变&#xff…

sqli-labs(Less-4) extractvalue闯关

extractvalue() - Xpath类型函数 1. 确认注入点如何闭合的方式 2. 爆出当前数据库的库名 http://127.0.0.1/sqlilabs/Less-4/?id1") and extractvalue(1,concat(~,(select database()))) --3. 爆出当前数据库的表名 http://127.0.0.1/sqlilabs/Less-4/?id1") …

一言成文大模型:大模型实践落地之路

百度CEO&#xff0c;李彦宏指出、深度学习技术&#xff0c;大语言模型具备了理解、生成、逻辑、记忆等人工智能的核心基础能力&#xff0c;为通用人工智能带来曙光。 元宇宙_一言成文大模型 一言成文大模型&#xff1a;大模型实践落地之路

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏2(附项目源码)

文章目录 先看本次实现的最终效果前言敌人生命值扣血测试&#xff0c;敌人死亡控制敌人动画敌人死亡动画敌人转向问题源码完结 先看本次实现的最终效果 前言 本期紧接着上一篇&#xff0c;主要内容是实现本期主要内容是实现敌人血条、动画和行为逻辑。 敌人生命值 绘制血条U…

15 万奖金!开放原子开源大赛OpenAnolis 赛题@你报名

8 月 29 日&#xff0c;2023 开源和信息消费大赛新闻发布会在北京召开&#xff0c;首届“开放原子开源大赛”正式启动报名。大赛由工业和信息化部、江苏省人民政府、湖南省人民政府共同主办&#xff0c;开源赛道拟由开放原子开源基金会、央视网、江苏省工业和信息化厅、无锡市人…

掌握这个技巧,你也能成为资产管理高手!

资产管理是企业管理中至关重要的一环&#xff0c;涉及到对公司财务、物资和信息等各个方面的有效监控和管理。 随着企业规模的扩大和业务复杂性的增加&#xff0c;采用先进的资产管理系统成为确保企业高效运营的必要条件之一。 客户案例 医疗机构 温州某医疗机构拥有大量的医…

超越传统:明懿金汇定义现代金融服务

量化交易的新纪元&#xff1a;明懿金汇引领创新浪潮 在数字化时代的飞速发展下&#xff0c;明懿金汇凭借其独特的跟单平台和卓越的金融服务&#xff0c;成为互联网金融行业的佼佼者。自2020年起&#xff0c;公司重点投资于互联网金融行业&#xff0c;并通过与国内知名证券软件开…

xxl-job配置须知

执行器也有自己的一个接口等 配置xxl-job YAML xxl:job:admin:addresses: http://localhost:8080/xxl-job-admin/executor:appname: media-process-serviceaddress:ip:port: 9999logpath: /data/applogs/xxl-job/jobhandlerlogretentiondays: 30accessToken: default_token--…

java面试常问

文章目录 java 基础1、JDK 和 JRE的区别2、 和equals的区别3、String、StringBuffer、StringBuilder4、String str “a”、 new String(“a”)一样吗&#xff1f;5、ArrayList 和 LinkedList的区别&#xff1f;6、HashMap的原理与实现6.1、容量与扩容6.2、扩容机制 7、HashMa…

智慧汽车—城市NOA迎爆发

在特斯拉引领的 TransformerBev 架构驱动下&#xff0c;智驾算法趋近于端到端的智驾大模型&#xff0c;使得智能驾驶开始步入城市 NOA 新时代。 消费者认知增强&#xff0c;未来市场空间广阔。伴随城市 NOA 在 23-24 年的落地和普及、L3 法规在年内的落地&#xff0c;行业 0-1…