主要完成了界面化设计,代码如下

import cv2 as cv
import numpy as np
import sys
from PyQt5.Qt import *
class MyWediget(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("分割烟草")
self.setWindowIcon(QIcon("2.jpg"))
self.setFixedSize(800, 430)
self.setup_ui()
self.arg = ""
def setup_ui(self):
def test():
fd = QFileDialog(window, "选择一个文件", "../", "All(*.*);;Images(*.png *.jpg);;Python文件(*.py)")
fd.move(200,0)
fd.setLabelText(QFileDialog.FileName, "我的文件")
fd.setLabelText(QFileDialog.Accept, "接受") fd.setLabelText(QFileDialog.Reject, "拒绝")
fd.setFileMode(QFileDialog.ExistingFiles)
def path(val):
inputPath.setText(val)
self.segmentation(val)
fd.fileSelected.connect(path)
fd.open()
inputPath = QLineEdit(self)
inputPath.resize(300,30)
btn = QPushButton(self)
btn.setText("选择文件")
def click():
btn.isDefault()
if len(inputPath.text()) > 0:
evt = QKeyEvent()
if evt.modifiers() == Qt.EnterKeyGo:
btn.pressed.connect(click)
btn.move(300,0)
btn.clicked.connect(test) def segmentation(self,val):
windows = QWidget(self)
windows.resize(400,400)
windows.move(0,30) w2 = QWidget(self)
w2.move(400,30)
w2.resize(400,400) self.arg = val
inputPath = QLineEdit(self)
inputPath.setText(self.arg) src = cv.imread(self.arg)
print(src.shape)
w = int(src.shape[1])
h = int(src.shape[0]) if w>1000 or h>800:
w = int(w/2)
h = int(h/2)
# print(w+" "+h)
src = cv.resize(src, (w, h), interpolation=cv.INTER_CUBIC)
r = cv.selectROI('Draw a rectangle', src, False) # 返回 (x_min, y_min, w, h)\ roi = src[int(r[1]):int(r[1] + r[3]), int(r[0]):int(r[0] + r[2])] # 原图mask
mask = np.zeros(src.shape[:2], dtype=np.uint8) # 矩形roi
rect = (int(r[0]), int(r[1]), int(r[2]), int(r[3])) # 包括前景的矩形,格式为(x,y,w,h) bgdmodel = np.zeros((1, 65), np.float64) # bg模型的临时数组
fgdmodel = np.zeros((1, 65), np.float64) # fg模型的临时数组 cv.grabCut(src, mask, rect, bgdmodel, fgdmodel, 11, mode=cv.GC_INIT_WITH_RECT) # 提取前景和可能的前景区域
mask2 = np.where((mask == 1) + (mask == 3), 255, 0).astype('uint8') print(mask2.shape) result = cv.bitwise_and(src, src, mask=mask2)
cv.imwrite('result.jpg', result)
cv.imwrite('roi.jpg', roi) print("over")
w2.setStyleSheet("border-image:url(roi.jpg)")
windows.setStyleSheet("border-image:url(result.jpg)") w2.show()
windows.show() if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWediget()
window.show()
sys.exit(app.exec_())  

第一、选择图像文件

第二、画出矩形框

第三、回车得到分割结果

如果想要生成exe文件,就需要配置.spec文件。请访问我的github

使用GrabCut做分割的更多相关文章

  1. 在CMD中使用for命令对单行字符串做分割的方法

    我们都知道CMD中的for命令是执行循环命令的,数据来源可以是一个文件,一个命令的结果或一个字符串,只有这3种来源 如果是一个文件则对这个文件的所有字符串进行循环处理 如果是一个命令结果,那么对这个命 ...

  2. 如何从视频中分离出音乐,和对音乐做分割,合并的处理(瑞典音乐家-新八宝盒.mp3.rar下载)

    点击下载:瑞典音乐家-新八宝盒.mp3.rar 1.工具 Total Video Converter 3.71 视频处理(安装软件,有绿色版的) MP3剪切器 MP3剪切器(小工具) Mp3mateP ...

  3. 将数组按指定个数分割,并以"|"做分割

    ```js function sliceArray(arr,num){ let newArr=[] for (var i = 0; i < arr.length; i+=num) { if(ar ...

  4. 图像分割之(四)OpenCV的GrabCut函数使用和源码解读

    图像分割之(四)OpenCV的GrabCut函数使用和源码解读         分类:            图像处理            计算机视觉             2013-01-23 ...

  5. opencv学习之路(31)、GrabCut & FloodFill图像分割

    一.GrabCut 1.利用Rect做分割 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat ...

  6. 基于传统方法点云分割以及PCL中分割模块

      之前在微信公众号中更新了以下几个章节 1,如何学习PCL以及一些基础的知识 2,PCL中IO口以及common模块的介绍 3,PCL中常用的两种数据结构KDtree以及Octree树的介绍    ...

  7. 用CorelDRAW等分分割图片的方法

    在CorelDRAW中,想要将图片等分分割可以通过放置容器来实现,根本不需要裁剪工具和辅助线.例如两等分:首先要建立确定等分的份数,建立长方形或正方形.然后把图片放置容器,调整位置,做无缝拼接就可以了 ...

  8. CString 字符串转化和分割

    1.格式化字符串 CString s;s.Format(_T("The num is %d."), i);相当于sprintf() 2.转为 int 转10进制最好用_ttoi() ...

  9. 如何分割(split)string字符串

    使用String#split()方法 如下所示: String string = "004-034556"; String[] parts = string.split(" ...

  10. sql 针对多个id或名称的分割和组合

    开发中经常遇到把多个id拼接在一起符号隔开传入数据库,那拆分呢就是个大事 SELECT nPushID INTO #temp FROM Table1 ), nCoulmn) SELECT * FROM ...

随机推荐

  1. Java基础学习知识点框架(详细)

    //学习网站 Java研发技术学习路线_飞月程序人生-CSDN博客_java开发学习路线 Java后端技术栈梳理 - 知乎 harrywfl/JavaGuide: [Java学习+面试指南] 一份涵盖 ...

  2. 对比python学julia(第一章)--(第五节)八十天环游地球

    5.1.  问题描述 <八十天环游地球>是法国作家儒勒·凡尔纳创作的一部长篇小说,讲述了这样一个神奇的故事. 在1872年的伦敦,英国绅士福格跟俱乐部的朋友以巨资打赌他能在80天实现环游地 ...

  3. 论文《policy-gradient-methods-for-reinforcement-learning-with-function-approximation 》的阅读——强化学习中的策略梯度算法基本形式与部分证明

    最近组会汇报,由于前一阵听了中科院的教授讲解过这篇论文,于是想到以这篇论文为题做了学习汇报.论文<policy-gradient-methods-for-reinforcement-learni ...

  4. python 中 ctypes 的使用尝试

    最近在看Python的性能优化方面的文章,突然想起ctypes这个模块,对于这个模块一直不是很理解,不过再次看完相关资料有了些新的观点. ctypes 这个模块个人观点就是提供一个Python类型与C ...

  5. 设计和实现AI算法算法时有没有必要在代码中加注释,没有用必要在实现之前弄个UML图???

    问题如题: 设计和实现AI算法算法时有没有必要在代码中加注释,没有用必要在实现之前弄个UML图??? 今天看到一个博文: https://www.cnblogs.com/siyuanwai/p/154 ...

  6. 5分钟教你使用idea调试SeaTunnel自定义插件

    在用Apache SeaTunnel研发SM2加密组件过程中,发现社区关于本地调试SeaTunnel文章过于简单,很多情况没有说明,于是根据自己遇到问题总结这篇文档.SeaTunnel本地调试官方文档 ...

  7. 三台服务器上离线安装redis哨兵集群,一主二从三哨兵

    三台服务器上离线安装redis哨兵集群,一主二从三哨兵 系统安装好gcc环境,(不然编译redis会报错).依旧不知道怎么离线安装gcc环境的可查看CentOS下离线安装gcc环境,图文详细 下载 点 ...

  8. WPF,图表控件

    开源代码地址:https://github.com/bearhanQ/WPFFramework; QQ群:332035933: <UserControl x:Class="WpfBoo ...

  9. 2024 年了,IT 运维监控系统都有哪些推荐?

    大浪淘沙,2024 年的今天,市面上很多监控系统慢慢淡出了大家的视野,而一些新的监控系统也逐渐崭露头角.今天我们就来看看 2024 年的当下,哪些 IT 运维监控系统最值得关注. Prometheus ...

  10. Problem - 616C - Codeforces

    Problem - 616C - Codeforces C. The Labyrinth 如果是直接对\(*\)去跑dfs或者bfs的话无疑是会超时的 既然如此,那我们可以去对 \(.\) 跑搜索,将 ...