精华内容
下载资源
问答
  • contours=([0,111],[111,111],[114,115],[1115,1118]) points=np.array(contours,np.int32) #多边形的顶点...# 手工绘制ROI区域 mask = np.zeros((h, w), dtype=np.uint8) cv2.fillPoly(mask, [points], ( 255), 8, ..
    contours=([0,111],[111,111],[114,115],[1115,1118])
    points=np.array(contours,np.int32)  #多边形的顶点坐标
    ROI = cv2.imread('1.png')
    proimage=ROI.copy()
    h, w, c = ROI.shape
    # 手工绘制ROI区域
    mask = np.zeros((h, w), dtype=np.uint8)
    cv2.fillPoly(mask, [points], ( 255), 8, 0)
    result = cv2.bitwise_and(proimage, proimage, mask=mask)
    cv2.imshow('ROI',result)
    cv2.waitKey(0)

    展开全文
  • 今天小编就为大家分享一篇Python+OpenCV感兴趣区域ROI提取方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 下面是ROI区域坐标提取代码讲解,这段代码利用鼠标事件可以在照片上或者是视频中截取的某帧图像上的图片进行划分。 导入库: import cv2 import numpy as np import joblib 建立空的列表,用于存放点坐标。 pts = []...

    下面是ROI区域坐标提取代码讲解,这段代码利用鼠标事件可以在照片上或者是视频中截取的某帧图像上的图片进行划分。

    import cv2
    import numpy as np
    import joblib
    
    pts = []  # 建立空的列表,用于存放点坐标
    
    def draw_roi(event, x, y, flags, param):
        img2 = img.copy()
        
        if event == cv2.EVENT_LBUTTONDOWN:  # 左键点击,选择点
            pts.append((x, y))
        if event == cv2.EVENT_RBUTTONDOWN:  # 右键点击,取消最近一次选择的点
            pts.pop()
        if event == cv2.EVENT_MBUTTONDOWN:  # 中键绘制轮廓
            mask = np.zeros(img.shape, np.uint8)
            points = np.array(pts, np.int32)
            points = points.reshape((-1, 1, 2))
            
            # 画多边形
            mask = cv2.polylines(mask, [points], True, (255, 255, 255), 2)
            mask2 = cv2.fillPoly(mask.copy(), [points], (255, 255, 255))  # 用于求 ROI
            mask3 = cv2.fillPoly(mask.copy(), [points], (0, 255, 0))      # 用于 显示在桌面的图像
            show_image = cv2.addWeighted(src1=img, alpha=0.8, src2=mask3, beta=0.2, gamma=0)
            cv2.imshow("mask", mask2)
            cv2.imshow("show_img", show_image)
            ROI = cv2.bitwise_and(mask2, img)
            cv2.imshow("ROI", ROI)
            cv2.waitKey(0)
            
        if len(pts) > 0:
            # 将pts中的最后一点画出来
            cv2.circle(img2, pts[-1], 3, (0, 0, 255), -1)
        if len(pts) > 1:
            # 画线
            for i in range(len(pts) - 1):
                cv2.circle(img2, pts[i], 5, (0, 0, 255), -1)  # x ,y 为鼠标点击地方的坐标
                cv2.line(img=img2, pt1=pts[i], pt2=pts[i + 1], color=(255, 0, 0), thickness=2)
        cv2.imshow('image', img2)
        
    # 创建图像与窗口并将窗口与回调函数绑定
    path=r"E:\yolov4-deepsort-master\data\video\4.png" #修改路径
    
    #为了使ROI与实际的点的坐标一致,需要将图片resize成目标大小,这里我是在视频中画ROI,所以为了匹配大小重新改了图片大小
    img_org = cv2.imread(path)
    print('img_org.size:',img_org.shape)
    img=cv2.resize(img_org,(1920,1080))
    print('img.size:',img.shape)
    
    cv2.namedWindow('image')
    cv2.setMouseCallback('image', draw_roi)
    print("[INFO] 单击左键:选择点,单击右键:删除上一次选择的点,单击中键:确定ROI区域")
    print("[INFO] 按‘S’确定选择区域并保存")
    print("[INFO] 按 ESC 退出")
    
    #退出与保存
    while True:
        key = cv2.waitKey(1) & 0xFF
        if key == 27:
            break
        if key == ord("s"):
            saved_data = {"ROI": pts}
            joblib.dump(value=saved_data, filename="config.pkl")
            print("[INFO] ROI坐标已保存到本地.")
            break
    cv2.destroyAllWindows()
    
    #加载保存好的坐标
    def Load_Model(filepath):
        img = cv2.imread(path)
        model = joblib.load(filepath)
        print(type(model))
        print(model)
        return model
    Load_Model('config.pkl')
    

    以上代码实现ROI的坐标的提取。下面的代码将ROI提取出的坐标进行拟合,方便对图上目标位置与roi进行比对,方便后续操作:

    def line(name,x1,y1,x2,y2):
        k=(y1-y2)/(x1-x2)
        b=y1-((y1-y2)/(x1-x2))*x1
        print('L%s:y=%.2f*x+%.2f'%(name,k,b))
    
    #下面将上述提取出的坐标进行拟合,  
    line('ab',0, 280,461, 180)
    line('bc',0, 493,947, 315)
    line('cd',947,315,1769, 399)
    line('da2',1769, 399,0,1078)
    line('停止线',1301,314,1505,333)
    line('停止线2',1505,333,1913,270)

    这里后面有时间可以封装一个函数,直接在ROI提取好坐标点以后,直接将所要拟合的坐标导入到拟合函数中,省去自己手动输入坐标的繁琐操作。

    展开全文
  • Python+OpenCV感兴趣区域ROI提取

    万次阅读 2017-06-23 22:00:28
    Python+OpenCV2感兴趣区域ROI提取方法一:使用轮廓步骤1"""src为原图""" ROI = np.zeros(src.shape, np.uint8) #感兴趣区域ROI proimage = src.copy() #复制原图 """提取轮廓""" proimage=cv2.cvtColor(proimage,cv...

    Python+OpenCV感兴趣区域ROI提取

    方法一:使用轮廓

    步骤1

    """src为原图"""
    ROI = np.zeros(src.shape, np.uint8)      #感兴趣区域ROI
    proimage = src.copy()         #复制原图
    """提取轮廓"""  
    proimage=cv2.cvtColor(proimage,cv2.COLOR_BGR2GRAY)                   #转换成灰度图
    proimage=cv2.adaptiveThreshold(proimage,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,7,7)                       
    proimage,contours,hierarchy=cv2.findContours(proimage,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_NONE) #提取所有的轮廓       

    步骤2

    """ROI提取"""
    cv2.drawContours(ROI, contours, 1,(255,255,255),-1)       #ROI区域填充白色,轮廓ID1
    ROI=cv2.cvtColor(ROI,cv2.COLOR_BGR2GRAY)                   #转换成灰度图
    ROI=cv2.adaptiveThreshold(ROI,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,7,7)                                     #自适应阈值化
    imgroi= cv2.bitwise_and(ROI,proimage)                        #图像交运算 ,获取的是原图处理——提取轮廓后的ROI
    2.#imgroi = cv2.bitwise_and(src,src,mask=ROI) 
    3.#imgroi = ROI & src 无需灰度+阈值,获取的是原图中的ROI

    方法二

    img1 = cv2.imread('roi.jpg')
    roi = img1[0:rows, 0:cols ]
    展开全文
  • 但是这些都是针对指节区域提取,或者针对旋转位置纠正,或者针对手指轮廓提取,并没有将这些东西整合起来。今天这篇就记录一下提取的流程。(仅仅适用于我的目标图片) 先看看效果:(尺寸都经过拉伸了) 流程:...

    之前写了好几篇有关于指静脉图片ROI提取的博客

    但是这些都是针对指节区域提取,或者针对旋转位置纠正,或者针对手指轮廓提取,并没有将这些东西整合起来。今天这篇就记录一下提取的流程。(仅仅适用于我的目标图片)

    先看看效果:(尺寸都经过拉伸了)

    流程:

    做ROI提取,最后提取出一个矩形,所以我们要的其实就是

    1.原图的旋转角度

    2.所需区域的上下边界

    3.所需区域的左右区域

    先看流程图

    其实对原图的操作无非是旋转+裁剪,主要是得到旋转角度和裁剪位置需要兜圈子,建议配合代码一起看

    import my_algorithm as my
    
    def get_ROI(path):
        img_temp=cv.imread(path,0)   # read img in gray mode
        img_gray=img_temp.copy()
        img =cv.imread(path,-1)
        rows,cols=img_temp.shape
        img_temp=cv.Canny(img_temp,90,150)  #get the main edges
        img_temp=my.get_edges(img_temp)   # only get the fingger edges
        points=my.get_centerline(img_temp)  #get the center points position for fitline
        line =cv.fitLine(points,cv.DIST_L2,0,0.01,0.01)
        angle = math.atan(line[1]/line[0])*180/math.pi  # get the angle for rotation
        M = cv.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),90+angle,1)
        img_rotation = cv.warpAffine(img,M,(cols,rows))   # rotation completed
        img_temp_rotation=cv.warpAffine(img_temp,M,(cols,rows))
        img_gray_rotation=cv.warpAffine(img_gray,M,(cols,rows))
        roi_cols=my.find_peak(img_gray_rotation[round(rows/2),:])
        roi_rows=my.find_bottom_rotation(img_temp_rotation) 
        ROI=img_rotation[roi_rows[0]:roi_rows[1],roi_cols[0]:roi_cols[1]]  #cut
        return ROI
    

    有关canny和自己实现的函数get_edges可以看我的这篇博客

    有关my.get_centerline() 和旋转操作可以看我的这篇博客

    有关指节位置的确定,my.find_peak()可以看这篇博客

    还有一个my.find_bottom_rotation(),实现比较简单,无非是对已有的手指轮廓取最靠近中间位置的和为非0 的列,这里就不贴代码了。

    有一点需要注意:在旋转后,原来为255的像素值在小角度旋转后可能就不再是255了

    示例:

    这是同一张图片的旋转后和旋转前,由于旋转实际上是矩阵的操作,旋转后你的像素点并不会刚刚好在一个整数的位置所以会有其他的操作。

    然后所有自己实现的方法我都放在my_algorithm.py里面了,需要的话可以上我的github上下载,包括这个get_ROI函数我也上传了源文件。

    我的github:https://github.com/zuozhenLib/OPENCV_PYTHON_FINGER

     

    点个赞哦亲~

     

    展开全文
  • OpenCV数字图像处理之ROI区域提取

    万次阅读 多人点赞 2019-03-04 11:07:18
    OpenCV数字图像处理之ROI区域提取 利用mask(掩模)技术提取纯色背景图像ROI区域中的人和物,并将提取出来的人或物添加在其他图像上。 1、实现原理 先通过cv.cvtColor()函数,将原RGB彩色图像转换为hsv色彩空间的...
  • 本代码利用python实现批量将ppm图片格式转换为jpg格式(同时实现根据提供的ROI坐标,提取特征区域),最后将图片大小统一为32*32
  • 从多条轨迹中提取出感兴趣区域ROI
  • 提取ROI区域 def roi_demo(image): """ ROI(region of interest) 感兴趣区域,从被处理的图像以方框、圆、椭圆、 不规则多边形等方式勾勒出需要处理的区域 """ face = src[200:400, 200:400] # 获取ROI...
  • cv2.imread后返回的值是一个矩阵,而我需要全部像素的值,不需要...得到区域的长宽,也就是像素的行数和列数 再用 for 循环,逐个打印 for a in range(h): for b in range(w): print(img3[a,b]) jihe.ap...
  • OpenCV-Python 选择ROI

    万次阅读 多人点赞 2019-06-01 18:07:36
    使用OpenCV中的一些函数获取ROI区域,这个用的最多3. 使用鼠标获取ROI区域4. 鼠标获取多边形ROI 1. 矩形ROI,直接使用切片,简单粗暴 import cv2 src = cv2.imread("D:\\python_script\\ffff\\qipan.png") roi = ...
  • Python代码和结果截图
  • 感兴趣区域提取 1 密度>=阈值的单元格降序集合 def set ( X , min_density ) : set = [ ] d_max = X [ 0 ] [ 0 ] for i in X : for j in i : if j > d_max : d_max = j ...
  • python+opencv图像分割:分割不规则ROI区域方法汇总

    万次阅读 多人点赞 2019-05-29 18:06:30
    如果是简易的矩形ROI区域其实是非常容易分割的,opencv的官方python教程里也有教到最简易的矩形ROI分割(剪裁),其本质是多维数组(矩阵)的切片。但是现实情况中,ROI是不规则的多边形,也可能是曲线边界,那么该...
  • 主要记录一下自己在找资料并实现的过程一、基本思路二、代码...本项目中主要提取图片中的圆形以及三角形。 二、代码实例 // An highlighted block src = cv.imread(r"D:\test5.jpg") # 读取图片 ROI = np.zeros(src...
  • Python提取图片的ROI

    2015-10-22 14:00:00
    图像处理经常需要提取图片的ROI,本文使用Python提取图片的ROI。 使用的Module是PIL (Pillow),一个图像处理库,用到的函数为类 Image 中的 crop 方法。 函数原型为: Image.crop(box=None) Returns a ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,856
精华内容 1,142
关键字:

pythonroi区域提取

python 订阅