使用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 ...
随机推荐
- ChatGPT的作用(附示例)
ChatGPT介绍(内容由ChatGPT生成) ChatGPT是一款基于GPT(生成式预测网络)的聊天机器人,它可以根据用户输入自动生成相应的回复. GPT是由OpenAI开发的一种预测网络模型,其中 ...
- 【Vue】Re03 computed属性计算和ES6的一些补充
一.Computed属性计算 四种计算处理的方式方法 <!DOCTYPE html> <html lang="en"> <head> <m ...
- 【Spring-Security】Re13 Oauth2协议P3 整合JWT
视频地址: https://www.bilibili.com/video/BV12D4y1U7D8?p=44 有用到Redis存储JWT,头疼每次找Windows版的 https://github.c ...
- 【Layui】14 代码修饰器 CodeDecorator
文档地址: https://www.layui.com/demo/code.html 基本案例: <pre class="layui-code">//在里面存放任意的代 ...
- 论文写作:“et al.”和“etc.”在英语中的区别
"et al."和"etc."在英语中有不同的用法和含义.以下是它们的区别和具体用法: et al. "et al."是拉丁短语" ...
- AI大模型的技术之母 —— Attention Is All You Need —— Tansformer
论文地址: https://arxiv.org/abs/1706.03762
- 如何使用强化学习算法解决15-puzzle问题,即所谓的“十五谜题”推盘游戏
相关: https://medium.com/@amshali/15-puzzle-with-reinforcement-learning-8bcfc1aa54e7 什么是15-puzzle问题? 数 ...
- 多线程之深入理解park与unpark
1.背景 面试官问,如何暂停一个线程勒..... 说说你对park的理解....... 2.代码 package com.ldp.demo01; import com.common.MyThreadU ...
- jQuery Eazyui的学习和使用(二)
既然这么优秀,我们赶紧来学学吧~ 下载地址 解压得到这些文件夹: 下面开始学习使用.(根据提供的demo学习常用基础控件的使用) 基础面板 引入对应样式文件和js文件后就可以直接使用了. 代码: &l ...
- (七)Redis 持久化 AOF、RDB
Redis 一旦服务器宕机,内存中的数据将全部丢失,从后端数据库恢复这些数据,对数据库压力很大,且性能肯定比不上从 Redis 中读取,会拖慢应用程序.所以,对 Redis 来说,实现数据的 持久化 ...