最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python OpenCV GrabCut使用實(shí)例解析

 更新時間:2019年11月11日 10:16:48   作者:葉念西風(fēng)  
這篇文章主要介紹了python OpenCV GrabCut使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

這篇文章主要介紹了python OpenCV GrabCut使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

先上一個效果圖:

使用Python3.7+OpenCV 3.x.

需要引入 numpy庫。

在圖上用鼠標(biāo)左鍵和右鍵標(biāo)記前景和后景即可.

如果需要重新標(biāo)記圖像,關(guān)閉程序重新運(yùn)行.

以下是具體實(shí)現(xiàn)代碼

# -*- coding:utf-8 -*-

'''
  Python: 3.5.7
  opencv 3.x

  在圖上用鼠標(biāo)左鍵和右鍵標(biāo)記前景和后景即可.
  如果需要重新標(biāo)記圖像,關(guān)閉程序重新運(yùn)行.
  By Ynxf http://www.zhouws.com
'''

import cv2
import numpy as np
import time

img_src = '../test_images/3.jpg'

drawing = False
mode = False

class GrabCut:
  def __init__(self, t_img):
    self.img = t_img
    self.img_raw = img.copy()
    self.img_width = img.shape[0]
    self.img_height = img.shape[1]
    self.scale_size = 640 * self.img_width // self.img_height
    if self.img_width > 640:
      self.img = cv2.resize(self.img, (640, self.scale_size), interpolation=cv2.INTER_AREA)
    self.img_show = self.img.copy()
    self.img_gc = self.img.copy()
    self.img_gc = cv2.GaussianBlur(self.img_gc, (3, 3), 0)
    self.lb_up = False
    self.rb_up = False
    self.lb_down = False
    self.rb_down = False
    self.mask = np.full(self.img.shape[:2], 2, dtype=np.uint8)
    self.firt_choose = True


# 鼠標(biāo)的回調(diào)函數(shù)
def mouse_event2(event, x, y, flags, param):
  global drawing, last_point, start_point
  # 左鍵按下:開始畫圖
  if event == cv2.EVENT_LBUTTONDOWN:
    drawing = True
    last_point = (x, y)
    start_point = last_point
    param.lb_down = True
    print('mouse lb down')
  elif event == cv2.EVENT_RBUTTONDOWN:
    drawing = True
    last_point = (x, y)
    start_point = last_point
    param.rb_down = True
    print('mouse rb down')
  # 鼠標(biāo)移動,畫圖
  elif event == cv2.EVENT_MOUSEMOVE:
    if drawing:
      if param.lb_down:
        cv2.line(param.img_show, last_point, (x,y), (0, 0, 255), 2, -1)
        cv2.rectangle(param.mask, last_point, (x, y), 1, -1, 4)
      else:
        cv2.line(param.img_show, last_point, (x, y), (255, 0, 0), 2, -1)
        cv2.rectangle(param.mask, last_point, (x, y), 0, -1, 4)
      last_point = (x, y)
  # 左鍵釋放:結(jié)束畫圖
  elif event == cv2.EVENT_LBUTTONUP:
    drawing = False
    param.lb_up = True
    param.lb_down = False
    cv2.line(param.img_show, last_point, (x,y), (0, 0, 255), 2, -1)
    if param.firt_choose:
      param.firt_choose = False
    cv2.rectangle(param.mask, last_point, (x,y), 1, -1, 4)
    print('mouse lb up')
  elif event == cv2.EVENT_RBUTTONUP:
    drawing = False
    param.rb_up = True
    param.rb_down = False
    cv2.line(param.img_show, last_point, (x,y), (255, 0, 0), 2, -1)
    if param.firt_choose:
      param.firt_choose = False
      param.mask = np.full(param.img.shape[:2], 3, dtype=np.uint8)
    cv2.rectangle(param.mask, last_point, (x,y), 0, -1, 4)
    print('mouse rb up')

if __name__ == '__main__':
  img = cv2.imread(img_src)
  if img is None:
    print('error: 圖像為空')
  g_img = GrabCut(img)

  cv2.namedWindow('image')
  # 定義鼠標(biāo)的回調(diào)函數(shù)
  cv2.setMouseCallback('image', mouse_event2, g_img)
  while (True):
    cv2.imshow('image', g_img.img_show)
    if g_img.lb_up or g_img.rb_up:
      g_img.lb_up = False
      g_img.rb_up = False
      start = time.process_time()
      bgdModel = np.zeros((1, 65), np.float64)
      fgdModel = np.zeros((1, 65), np.float64)

      rect = (1, 1, g_img.img.shape[1], g_img.img.shape[0])
      print(g_img.mask)
      mask = g_img.mask
      g_img.img_gc = g_img.img.copy()
      cv2.grabCut(g_img.img_gc, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_MASK)
      elapsed = (time.process_time() - start)
      mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8') # 0和2做背景
      g_img.img_gc = g_img.img_gc * mask2[:, :, np.newaxis] # 使用蒙板來獲取前景區(qū)域
      cv2.imshow('result', g_img.img_gc)

      print("Time used:", elapsed)

    # 按下ESC鍵退出
    if cv2.waitKey(20) == 27:
      break

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python圖片驗(yàn)證碼生成代碼

    python圖片驗(yàn)證碼生成代碼

    這篇文章主要為大家詳細(xì)介紹了python圖片驗(yàn)證碼生成代碼,感興趣的朋友可以參考一下
    2016-07-07
  • Python結(jié)合Selenium簡單實(shí)現(xiàn)Web自動化測試

    Python結(jié)合Selenium簡單實(shí)現(xiàn)Web自動化測試

    這篇文章是入門級別的應(yīng)用Python + Selenium進(jìn)行自動化測試,包括環(huán)境搭建及簡單的實(shí)例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • scrapy框架ItemPipeline的使用

    scrapy框架ItemPipeline的使用

    本文主要介紹了scrapy框架ItemPipeline的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • python實(shí)現(xiàn)K近鄰回歸,采用等權(quán)重和不等權(quán)重的方法

    python實(shí)現(xiàn)K近鄰回歸,采用等權(quán)重和不等權(quán)重的方法

    今天小編就為大家分享一篇python實(shí)現(xiàn)K近鄰回歸,采用等權(quán)重和不等權(quán)重的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 詳解python進(jìn)行mp3格式判斷

    詳解python進(jìn)行mp3格式判斷

    這篇文章主要介紹了詳解python進(jìn)行mp3格式判斷,具有一定的參考價值,有興趣的可以了解一下。
    2016-12-12
  • 圖文詳解OpenCV中光流以及視頻特征點(diǎn)追蹤

    圖文詳解OpenCV中光流以及視頻特征點(diǎn)追蹤

    光流是空間運(yùn)動物體在觀察成像平面上的像素運(yùn)動的瞬時速度,是利用圖像序列中像素在時間域上的變化以及相鄰幀之間的相關(guān)性來找到上一幀跟當(dāng)前幀之間存在的相應(yīng)關(guān)系,這篇文章主要給大家介紹了關(guān)于OpenCV中光流以及視頻特征點(diǎn)追蹤的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • python工具快速為音視頻自動生成字幕(使用說明)

    python工具快速為音視頻自動生成字幕(使用說明)

    這篇文章主要介紹了python工具快速為音視頻自動生成字幕(使用說明),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Python Matplotlib繪制條形圖的全過程

    Python Matplotlib繪制條形圖的全過程

    Python畫圖主要用到matplotlib這個庫,具體來說是pylab和pyplot這兩個子庫,這兩個庫可以滿足基本的畫圖需求,下面這篇文章主要給大家介紹了關(guān)于Python Matplotlib繪制條形圖的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • python人工智能算法之決策樹流程示例詳解

    python人工智能算法之決策樹流程示例詳解

    這篇文章主要為大家介紹了python人工智能算法之決策樹流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Windows環(huán)境下Python3.6.8 importError: DLLload failed:找不到指定的模塊

    Windows環(huán)境下Python3.6.8 importError: DLLload failed:找不到指定的模塊

    這篇文章主要介紹了Windows環(huán)境下Python3.6.8 importError: DLLload failed:找不到指定的模塊,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評論

青海省| 潮州市| 肇庆市| 无棣县| 太原市| 沅陵县| 砚山县| 通辽市| 乡宁县| 泸水县| 普宁市| 会昌县| 林西县| 柘城县| 七台河市| 龙川县| 武宣县| 颍上县| 黑河市| 尼木县| 东明县| 台北市| 孟州市| 鄂温| 普兰县| 溧水县| 自治县| 泽州县| 江安县| 高平市| 逊克县| 慈利县| 皮山县| 凌海市| 钟祥市| 南充市| 邻水| 安康市| 泗洪县| 抚顺市| 滁州市|