精华内容
下载资源
问答
  • 图像在OpenCV中表现为Numpy数组,因此可以很轻松的使用数组切片来截取ROI; roi = image[startY:endY, startX:endX],只要提供开始和结束(x,y)坐标的顺序,就可以轻松地使用OpenCV裁剪图像!

    这篇博客将介绍如何使用Python,OpenCV截取图片ROI(Regions Of Interests,即我们感兴趣的部分)。

    图像在OpenCV中表现为Numpy数组,因此可以很轻松的使用数组切片来截取ROI;
    roi = image[startY:endY, startX:endX],只要提供开始和结束(x,y)坐标的顺序,就可以轻松地使用OpenCV裁剪图像!

    1. 效果图

    原图 VS face1 VS face2 效果图如下:
    在这里插入图片描述

    2. 步骤

    2.1 环境配置

    opencv安装可参考

    pip install opencv-contrib-python

    2.2 原理

    OpenCV将图像表示为NumPy数组,高度第一(行数),宽度第二(列数)。

    roi = image[startY:endY, startX:endX]

    3. 源码

    # USAGE
    # python opencv_crop.py --image ymzyt.jpg
    
    # 导入必要的包
    import argparse
    
    import cv2
    
    # 构建命令行参数及机械
    # --image 磁盘图片路径,默认名称为当前py文件同级目录:fjdh.jpg
    ap = argparse.ArgumentParser()
    ap.add_argument("-i", "--image", type=str, default="fjdh.jpg",
                    help="path to the input image")
    args = vars(ap.parse_args())
    
    # 从磁盘加载图片,并展示
    image = cv2.imread(args["image"])
    cv2.imshow("Original", image)
    
    # 截取面部区域,可通过Photoshop,GIMP, Paint等获取面部区域的坐标
    # roi = image[startY:endY, startX:endX]
    face = image[85:250, 85:220]
    cv2.imshow("Face", face)
    cv2.waitKey(0)
    
    # 应用另一个裁剪,提取另一张脸
    body = image[90:450, 0:290]
    cv2.imshow("Body", body)
    cv2.waitKey(0)
    

    参考

    展开全文
  • OpenCV+Python 截取图像中选中区域ROI

    千次阅读 2019-09-23 09:39:09
    importnumpyasnp importcv2 #使用鼠标获取ROI区域 src=cv2.imread(r"C:\Users\ljt\Desktop\pic\all.bmp",0) ...cv2.namedWindow('roi',cv2.WINDOW_NORMAL) ...roi=cv2.selectROI(windowName=...

    import numpy as np

    import cv2 



     

    #使用鼠标获取ROI区域

    src=cv2.imread(r"C:\Users\ljt\Desktop\pic\all.bmp",0)

    cv2.namedWindow('roi',cv2.WINDOW_NORMAL)

    cv2.imshow('roi',src)

    roi=cv2.selectROI(windowName="roi",img=src,showCrosshair=True,fromCenter=False)

    x,y,w,h=roi

    cv2.rectangle(img=src,pt1=(x,y),pt2=(x+w,y+h),color=(0,0,255),thickness=2)

    img=src[y:y+h,x:x+w]

    cv2.imshow('img',img)

    cv2.waitKey(0)

    cv2.destroyAllWindows()

    展开全文
  • 用不同的方法截取ROI区域前言第一种第二种 前言 第一种 话不多说,注释详细写在代码当中 import cv2 src = cv2.imread('pic.jpg') src = cv2.resize(src, (0,0), fx=1.2, fy=1.2)#水平轴与垂直轴上的比例因子,我...

    用不同的方法截取ROI区域

    前言

    任务

    第一种

    话不多说,注释详细写在代码当中

    import cv2 
    src = cv2.imread('pic.jpg')
    src = cv2.resize(src, (0,0), fx=1.2, fy=1.2)#水平轴与垂直轴上的比例因子,我给它拉大了1.2倍
    print("--------- HL截取ROI区域的测试 ---------")
    print("鼠标选择ROI,然后点击 enter键")
    r = cv2.selectROI('org', src, False)  # ,返回 (x_min, y_min, w, h)
    
    # roi区域
    roi = src[int(r[1]):int(r[1]+r[3]), int(r[0]):int(r[0]+r[2])]
    cv2.destroyAllWindows()
    cv2.imshow('ROI',roi)#显示ROI区域
    
    k = cv2.waitKey(0) & 0xFF
    if k == 27: # 按Esc 键即可退出
        cv2.destroyAllWindows()
    

    ROI
    截取后ROI

    第二种

    import numpy as np
    import cv2 
    src=cv2.imread('pic.jpg')
    cv2.namedWindow('roi',cv2.WINDOW_AUTOSIZE)
    print("--------- HL截取ROI区域的测试 ---------")
    print("鼠标选择ROI,然后点击 enter键")
    roi=cv2.selectROI(windowName="roi",img=src,showCrosshair=True,fromCenter=False)
    x,y,w,h=roi
    cv2.rectangle(img=src,pt1=(x,y),pt2=(x+w,y+h),color=(0,0,255),thickness=2)
    img=src[y:y+h,x:x+w]
    cv2.destroyAllWindows()
    cv2.imshow('ROI',img)
    
    k = cv2.waitKey(0) & 0xFF
    if k == 27: # 按esc 键即可退出
        cv2.destroyAllWindows()
    

    roi
    roi

    第二种(修正)

    修正
    被组织发现我第二种方法是投机取巧 滥竽充数了
    经过再次了解,修正方法如下:

    import cv2
    def on_mouse(event, x, y, flags, param):
        global img, click, slip    #定义局部变量全局可用
        img2 = img.copy()          #将原图复制copy一份给我处理
        if event == cv2.EVENT_LBUTTONDOWN:   #库函数————左键点击
            click = (x,y)             #定义一个参数存放点击的坐标
            cv2.circle(img2, click, 5, (255,255,0), 5)  #点的时候显示一个小点即圆点供用户交互
            cv2.imshow('pic', img2)
        elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON):   #鼠标按住左键拖曳
            cv2.rectangle(img2, click, (x,y), (0,125,255), 5)#上一步记录的坐标点作为起点,用户拖拽轨迹点为终点画矩形框
            cv2.imshow('pic', img2)
        elif event == cv2.EVENT_LBUTTONUP:  #当鼠标左键释放时
            slip = (x,y)
            cv2.rectangle(img2, click, slip, (0,0,255), 5) 
            cv2.imshow('pic', img2)
            min_x = min(click[0],slip[0])     
            min_y = min(click[1],slip[1])
            width = abs(click[0] - slip[0])
            height = abs(click[1] -slip[1])
            roi = img[min_y:min_y+height, min_x:min_x+width]#提取此时的ROI区域
            cv2.destroyAllWindows()
            cv2.imshow('ROI', roi)
    
    img = cv2.imread('pic.jpg')
    print("--------- HL截取ROI区域的测试 ---------")
    cv2.namedWindow('pic')
    cv2.setMouseCallback('pic', on_mouse)
    cv2.imshow('pic', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    将注释都放在代码中了
    运行结果
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 我们有时候使用Opencv截取一些图片的的时候,会选取到图片以外的区域,如何填充这种区域貌似没法直接用Opencv自带函数,这里给一个函数,以实现这个功能,是我毕设的很小一部分,需要的可以直接拿过去用。...
  • opencv for python的图像ROI相关操作

    千次阅读 2019-03-25 23:17:27
    截取规则和不规则ROI的方法一、ROI简介:二、截取规则ROI: 一、ROI简介: ...1.矩形区域:可用python中的切片器选择像素点的行数列数范围截取相关的指定区域。 roi=img[100:200,200:300] #截取图像img中...

    一、ROI简介:

    所谓ROI即为感兴趣区域(range of interest)即从被处理的图像中以方框、圆、椭圆、不规则多边形等方式截取需要处理的区域。

    二、截取矩形ROI:

    矩形区域:可用numpy中的数组索引选择像素点的行数列数范围截取相关的指定区域。

    roi=img[100:200,200:300]
     #截取图像img中像素点行数为100到200、列数为200到300即x轴200至300y轴100至200的roi区域
    roi1=img[:,:,0] #0,1,2分别对应blue,green,red三个颜色通道
    #截取图像中的blue颜色通道中的全部像素点即整个图像的范围
    

    三、截取不规则ROI:

    需用函数简介:
    cv2.bitwise_and(src1,src2,[,dst[,mask]]) → dst
    对两幅图像进行按位和运算,其中mask为掩码,src和dst分别为原图像和返回图像

    cv2.bitwise_not(src,[,dst[,mask]]) → dst
    对一幅图像进行按位非运算,其中mask为掩码

    cv2.threshold(src,thresh,maxval,type[,dst]) → dst
    简单阈值函数将原图像二值化,其中各参数分别代表原图像、阈值、二进制值的最大值、阈值处理的方法

    cv2.cvtColor(src,code[,dst[,dstCn]]) → dst
    颜色空间转换函数,code为颜色空间转换模式,常用的有cv2.COLOR_BGR2GRAY:将BGR格式的转换为灰度格式的图像
    cv2.COLOR_BGR2HSV:将BGR格式的图像转换为HSV格式的图像

    cv2.add(src1,src2[,dst[,mask[,dtype]]]) → dst将两幅源图像进行简单算术加和操作

    利用阈值函数来生成掩码,将其分为ROI和背景(可白可黑),然后利用位运算中的反运算来生成掩码的二进制反码、利用和运算来生成ROI。
    如下以将Opencv的logo融合到另一张图中为例来说明其操作:

    import cv2
    import numpy as np
    img1=cv2.imread("……/1.jpg") #logo图像
    img2=cv2.imread("……/2.jpg") #要添加logo的图像
    rows,cols=img1.shape[:2] 
    range=img2[:rows,:cols]  #选取ROI所在的矩形区域即为logo的全部区域
    img1_gray=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
    #由于简单阈值函数cv2.threshold()只能接受单通道的图像,因此需要利用颜色空间转换函数cv2.cvtColor()将其转换为灰度图像
    mask=cv2.threshold(img1_gray,175,255,cv2.THRESH_BINARY)
    #利用简单阈值函数来生成黑白二进制值的掩码
    mask_inv=cv2.bitwise_not(mask) #利用位运算的非函数来生成与mask黑白区域对调的掩码
    roi1=cv2.bitwise_and(img1,img1,mask_inv) 
     #利用和函数来生成ROI1,即在img2中挖出logo的区域,即该区域为黑
    roi2=cv2.bitwise_and(img2,img2,mask)
    #利用和函数生成ROI2,即使logo的背景变黑且使logo变白
    add=cv2.add(roi1,roi2)  # 利用图像加法来将两个ROI加在一起来完成更好的融合
    img2[:rows,:cols]=add  # 将合成后的区域还原到img2上
    #可展示出各个中间处理图像,来理解整个过程
    cv2.imshow("mask",mask)
    cv2.imshow("mask_inv",mask_inv)
    cv2.imshow("add1",add1)
    cv2.imshow("add2",add2)
    cv2.imshow("add",add)
    cv2.imshow("img2",img2")
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    

    图片示例
    处理后的图像
    logo

    展开全文
  • 一、利用鼠标移动截取感兴趣区域ROIOpenCV-python自带 API 可直接选择矩形区域作为ROI,该API位于目标追踪模块,主要是cv2.selectROI()函数 import cv2 img = cv2.imread(“D:\OpenCV-python ROI\sliceROI_image....
  • OpenCV python 图片导入与图片截取 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 截取图片 Created on Mon Nov 11 16:39:41 2019 @author: huzhenxing """ import cv2 #区域大小 roi_Up = ...
  • opencv python

    2021-07-12 18:53:08
    文章目录定义图像显示函数显示图像显示视频RoI 区域阈值平滑形态学操作边缘检测sobelscharr拉普拉斯算子canny非极大值抑制双阈值轮廓轮廓特征 须知:图像是RGB,opencv 处理 BGR 定义图像显示函数 def cv_show...
  • 现在我的毕业设计进行到数据处理的阶段,要在乳腺图像上截取4张相同大小的1024*1024图片,并且每张图片都必须覆盖微钙化点,以下是我现在用到的一些简单程序。 1.首先是截图程序如下: import numpy as np import cv...
  • 截取部分图像数据 img=cv2.imread('cat.jpg') cat=img[0:200,0:200] cv_show('cat',cat) 颜色通道提取 b,g,r=cv2.split(img) #将图片拆成三通道 img=cv2.merge((b,g,r)) cv_show('img',img) #将三通道合并 #只...
  • 今天小编就为大家分享一篇Python+OpenCV感兴趣区域ROI提取方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 这里介绍利用 OpenCV 截取任意形状ROI的基本思路。会使用到的几个比较重要的方法有: 直线拟合:cv.fitLine 旋转矩阵:cv.getRotationMatrix2D 仿射变换:cv.warpAffine 轮廓绘制:cv.drawContours 图像融合:cv.add...
  • find the bounding rectangle and draw it idx =0 for cnt in contours: idx += 1 x,y,w,h = cv2.boundingRect(cnt) roi = gray[y:y + h, x:x + w] cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) cv2.rectangle...
  • 前言 当我们分割银行卡字符的时候,会遇到银行卡照片过于模糊,而且我们的算法无法提取,这样的... roi = cv.selectROI(windowName="roi", img=src, showCrosshair=True, fromCenter=False) x, y, w, h = roi cv.re
  • Python+opencv裁剪/截取图片的几种方式

    万次阅读 多人点赞 2021-04-29 11:56:49
    文章目录前言一、手动单张裁剪/截取二、根据图片的位置坐标进行裁剪/截取三、opencv获取边缘并根据bounding box截取/裁剪目标四、用YOLO目标检测框裁剪并批量保存总结 前言 在计算机视觉任务中,如图像分类,图像...
  • OpenCV入门:ROI感兴趣区域(鼠标事件选定区域) ...
  • 截取图像 import cv2 as cv import numpy as np #ROI操作 print("-----------Hello Python-----------") src = cv.imread(r"C:\Users\dahula\Desktop\jietu.png") cv.namedWindow("input images",cv.WINDOW_AUTOSIZE...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 628
精华内容 251
关键字:

opencvpython截取roi

python 订阅