使用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 ...
随机推荐
- mysql进阶笔记
说明:此文章并非原创,参考极客时间文章<MySQL实战45讲>做的一些笔记,方便自己查阅,有兴趣可以自行去极客时间阅读,内容非常给力. mysql引擎 Innodb: Page是Inno ...
- Mysql查询几天前或几天后的日期
查询 当天±天数 后的日期."-14"表示14天前的日期,"14"表示14天后的日期 NOW()精确到时分秒,CURDATE()只精确到天 #查询今天 1.se ...
- 【Phoenix】4.14.1-Hbase-1.3版本 安装
Phoenix 版本 会附带Hbase版本,要根据安装的Hbase版本下载Phoenix 下载Phoenix wget http://archive.apache.org/dist/phoenix/a ...
- 【GPU】如何两周内零经验手搓一个GPU | 美国工程师极限挑战 | 重写三次 | CUDA | SIMD | ISA指令集 | Verilog | OpenLane
地址: https://www.youtube.com/watch?v=FTh-c2ek6PU
- 人形机器人(具身智能,Embodied Intelligence)—— 抓取动作(上半身动作规划)的各大公司技术路线
视频地址: https://www.youtube.com/watch?v=UZBSXzNKB1Q
- 【转载】 Integrating New Games into Retro Gym
https://medium.com/aureliantactics/integrating-new-games-into-retro-gym-12b237d3ed75 OpenAI's retro ...
- 实验室深度学习服务器崩溃——Oops: 0000 [#1] SMP NOPTI
这两天实验室的服务器总是崩溃,重启已经不能解决问题了,由于是跑深度学习的服务器,而且还是承接国家级项目的运行服务器,可以说是实验室的主要生产力了,给出报错的日志: Oct 16 09:42:33 ro ...
- 利用sql查出的结果集重新生成一张虚拟表
"select * from ( SELECT mc.id,mc.sn,mc.updated,mc.client_name,mc.brand,mc.mileage,mc.displace,m ...
- php学习笔记(一)————php类的概念
<?php //类的概念 /* * 一个类包含自己的属性和函数 * * 属性:属于类自己的常量和变量 * * 方法:就是函数 * * 类是一类事物的抽象 */ //例子: //车就是一种抽象 c ...
- Navicat 导入sql文件执行失败问题的处理
之前有很多次用Navicat执行导出的sql文件,跑着跑着就批量报错,有的报错能看懂,有的报错压根就找不到,很长的记录中翻也不好翻. 现在用命令行执行的话,还是挺好使. 1进入mysql安装路径下的b ...