使用GrabCut做分割
主要完成了界面化设计,代码如下
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做分割的更多相关文章
- 在CMD中使用for命令对单行字符串做分割的方法
我们都知道CMD中的for命令是执行循环命令的,数据来源可以是一个文件,一个命令的结果或一个字符串,只有这3种来源 如果是一个文件则对这个文件的所有字符串进行循环处理 如果是一个命令结果,那么对这个命 ...
- 如何从视频中分离出音乐,和对音乐做分割,合并的处理(瑞典音乐家-新八宝盒.mp3.rar下载)
点击下载:瑞典音乐家-新八宝盒.mp3.rar 1.工具 Total Video Converter 3.71 视频处理(安装软件,有绿色版的) MP3剪切器 MP3剪切器(小工具) Mp3mateP ...
- 将数组按指定个数分割,并以"|"做分割
```js function sliceArray(arr,num){ let newArr=[] for (var i = 0; i < arr.length; i+=num) { if(ar ...
- 图像分割之(四)OpenCV的GrabCut函数使用和源码解读
图像分割之(四)OpenCV的GrabCut函数使用和源码解读 分类: 图像处理 计算机视觉 2013-01-23 ...
- opencv学习之路(31)、GrabCut & FloodFill图像分割
一.GrabCut 1.利用Rect做分割 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat ...
- 基于传统方法点云分割以及PCL中分割模块
之前在微信公众号中更新了以下几个章节 1,如何学习PCL以及一些基础的知识 2,PCL中IO口以及common模块的介绍 3,PCL中常用的两种数据结构KDtree以及Octree树的介绍 ...
- 用CorelDRAW等分分割图片的方法
在CorelDRAW中,想要将图片等分分割可以通过放置容器来实现,根本不需要裁剪工具和辅助线.例如两等分:首先要建立确定等分的份数,建立长方形或正方形.然后把图片放置容器,调整位置,做无缝拼接就可以了 ...
- CString 字符串转化和分割
1.格式化字符串 CString s;s.Format(_T("The num is %d."), i);相当于sprintf() 2.转为 int 转10进制最好用_ttoi() ...
- 如何分割(split)string字符串
使用String#split()方法 如下所示: String string = "004-034556"; String[] parts = string.split(" ...
- sql 针对多个id或名称的分割和组合
开发中经常遇到把多个id拼接在一起符号隔开传入数据库,那拆分呢就是个大事 SELECT nPushID INTO #temp FROM Table1 ), nCoulmn) SELECT * FROM ...
随机推荐
- 界面自动化测试录制工具,让python selenium自动化测试脚本开发更加方便
自动化测试中,QTP和selenium IDE都支持浏览器录制与回放功能,简单的来说就像一个记录操作步骤的机器人,可以按照记录的步骤重新执行一遍,这就是脚本录制.个人觉得传统录制工具有些弊端,加上要定 ...
- 4、SpringBoot2之整合SpringMVC
创建名为springboot_springmvc的新module,过程参考3.1节 4.1.重要的配置参数 在 spring boot 中,提供了许多和 web 相关的配置参数(详见官方文档),其中有 ...
- 【BatchProgram】 读取文本批量创建目录
NameList.txt文件内容 FILE-NAME-A FILE-NAME-B FILE-NAME-C ... 根据上面文件批量创建对应的目录,且附加序号 CMD代码: @ECHO OFF SETL ...
- OpenCV计算机视觉学习(16)——仿射变换学习笔记
如果需要其他图像处理的文章及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractic ...
- 从.net开发做到云原生运维(七)——服务网格Istio
1. 前言 上篇文章我们讲了dapr,dapr作为开发阶段使用的组件,需要开发人员知道怎么使用,到此篇文章之前,开发人员的开发任务已经完成了,剩下的就是一些运维相关的事情了.假设我们的服务已经开发完成 ...
- 强化学习框架chainerrl的安装
源码地址: https://gitee.com/mirrors_chainer/chainerrl PS: 需要注意的是本文的安装方式并不能支持CUDA,也就是无法使用GPU进行计算:年久失修的计算框 ...
- 《最新出炉》系列小成篇-Python+Playwright自动化测试-66 - 等待元素至指定状态(出现、移除、显示和隐藏)
1.简介 在我们日常工作中进行UI自动化测试时,保证测试的稳定性至关重要.其中一个关键方面是正确地定位和操作网页中的元素.在网页中,元素可能处于不同的状态,有些可能在页面加载完成之前不在DOM中,需要 ...
- 【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
Azure Container Instance服务介绍 Azure 容器实例(Azure Container Instances,简称 ACI)是一个无服务器容器解决方案,允许用户在 Azure 云 ...
- 瑞芯微-I2S | ALSA基础-3
针对音频设备,linux内核中包含了两类音频设备驱动框架: OSS:开放声音系统 包含dsp和mixer字符设备接口,应用访问底层硬件是直接通过sound设备节点实现的: ALSA:先进linux声音 ...
- Linux程序之可变参数&&选项那些事!
一.linux应用程序如何接收参数? 1. argc.argv Linux应用程序执行时,我们往往通过命令行带入参数给程序,比如 ls /dev/ -l 其中参数 /dev/ .-l都是作为参数传递给 ...