当前位置: 首页 > news >正文

【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 cv2img_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 imageim = cv2.imread('/root/userfolder/Experiment/1.png')# resize imagenewHeight = 200newWidth = 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()# 执行SSrects = ss.process()print('Total Number of Region Proposals: {}'.format(len(rects)))# 推荐100个ROInumShowRects = 100imOut = im.copy()# 显示前100个区域外接矩形框for i, rect in enumerate(rects):if i < numShowRects:x, y, w, h = rectcv2.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 notebookimg = imOut[:,:,::-1] # 必须为 ::-1plt.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)

http://www.lryc.cn/news/232042.html

相关文章:

  • MongoDB是一个NoSQL数据库,有着多种不同的命令和操作。以下是一些常见的MongoDB命令:
  • 网络运维Day19
  • 颜色标记txt和多根走线【Cadance进阶】
  • 你是想被ChatGPT改变,还是改变软件开发的未来?丨IDCF
  • Homography详解在MVSNet中的应用
  • linux parted给磁盘分区
  • 大数据毕业设计选题推荐-机房信息大数据平台-Hadoop-Spark-Hive
  • 使用 PYTORCH 进行图像风格迁移
  • vscode使用flake8设置单行最长字符限制设置失败的问题
  • SAP KO22内部订单预算BAPI与BDC
  • K8S篇之实现利用Prometheus监控pod的实时数据指标
  • 智能巡检软件怎么选?企业设备管理需要做什么?
  • 【python】Django——连接mysql数据库
  • 北京君正客户应用案例:掌静脉3D人脸猫眼视屏智能锁
  • 人工智能+游戏 会带来什么
  • 人工智能基础_机器学习030_ElasticNet弹性网络_弹性回归的使用---人工智能工作笔记0070
  • Python算法——平衡二叉树(AVL)
  • 公开可用的API 合集
  • 单片机编程原则
  • 开源短剧付费变现小程序源码系统+在线开通会员+在线充值 带完整的搭建教程
  • 基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用能力
  • 电商平台为什么需要及时部署ssl证书?
  • 卡码网语言基础课 | 12. 位置互换
  • 用DOM来读取XML时要注意的一些概念
  • openresty安装配置,执行shell脚本
  • 解决Dockerfile中 Could not initialize class sun.awt.X11FontManager错误
  • Kubernetes(k8s)进阶
  • [Vue 配置] Vite + Vue3 项目配置和使用 NProgress
  • Android MQTT开发之 Hivemq MQTT Client
  • 【Maven教程】(十一):使用 Maven 构建 Web应用 —— 使用 jetty-maven-plugin 进行测试、使用 Cargo 实现自动化部署~