panrenlong的博客

私信 关注
忍耐恒_至拙胜至巧
码龄12年

从事教育行业,主要研究方向是计算机视觉、图像处理与模式识别、大数据统计分析等。擅长使用的开发语言是Matlab、python等。

  • 351,789
    被访问量
  • 60
    原创文章
  • 31,882
    作者排名
  • 191
    粉丝数量
  • 于 2008-10-18 加入CSDN
获得成就
  • 获得227次点赞
  • 内容获得61次评论
  • 获得1,093次收藏
荣誉勋章
兴趣领域
  • #后端
    #Python#Java#MySQL#R
TA的专栏
  • MySQL数据库操作
    9篇
  • R语言连接数据库MySQL
    12篇
  • R语言
    10篇
  • R数据分析
    4篇
  • 聚类
    1篇
  • 学习网站
    20篇
  • 数据分析
    1篇
  • 软件工程
    3篇
  • PyQt5 GUI设计
    20篇
  • Python基础
    7篇
  • TensorFlow
    7篇
  • 深度学习
    6篇
  • 神经网络
    5篇
  • 机器学习
    2篇
  • 数据库系统VFP
    1篇
  • Python开发
    11篇
  • 办公技能
    1篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

PyQt5学习笔记08——创建封装类模板及类的测试方式

文章目录PyQt5学习笔记08——PyQt5类模板创建及测试方式1、在PyCharm中创建一个基于PyQt5实现的GUI系统的控件类2、在PyCharm中的主应用程序中使用控件类3、类的测试方法4、创建封装类的获得模板PyQt5学习笔记08——PyQt5类模板创建及测试方式1、在PyCharm中创建一个基于PyQt5实现的GUI系统的控件类窗口类文件名: WindowClass.pyfro...
原创
328阅读
0评论
0点赞
发布博客于 2 年前

PyQt5学习笔记07——面向过程和面向对象的编程过程理解

文章目录基于PyQt5的GUI开发过程——基于面向过程的编程方式和基于面向对象的编程方式1、面向过程的代码编程方式——类似“顺序结构”控制语句2、面向过程和面向对象的编程方法的区别1)使用面向过程的编程方式实现2)使用面向对象的编程方式实现1、创建一个应用程序3、面向对象的代码方式实现GUI基于PyQt5的GUI开发过程——基于面向过程的编程方式和基于面向对象的编程方式1、面向过程的代码编程方...
原创
347阅读
1评论
0点赞
发布博客于 2 年前

PyQt5学习笔记06——this和super的用法总结

文章目录PyQt5学习笔记04—— this和super的用法总结1. this1.普通的直接引用2.形参与成员名字重名,用this来区分:3.引用构造函数2. super1.普通的直接引用2.子类中的成员变量或方法与父类中的成员变量或方法同名3.引用构造函数3. super和this的异同:PyQt5学习笔记04—— this和super的用法总结【原文链接】 https://www.cn...
转载
1170阅读
0评论
0点赞
发布博客于 2 年前

R+MySQL数据库的学习笔记(11)——RMySQL写数据到数据库中dbWriteTable

文章目录RMySQL写数据到数据库中dbWriteTable问题:在R+RMySQL版本下执行dbWriteTable写R语言的数据框data.Frame到MySQL数据库的表中,出现如下错误:详细操作过程如下:1、连接RMySQL数据库,并创建一个R数据框2、将R数据框写入到数据库中3、解决方法如下3.1 下载的**RMariaDB**数据库下载方式:下载页面:3.2 安装RMariDB数据库...
原创
1060阅读
0评论
0点赞
发布博客于 2 年前

R+MySQL数据库的学习笔记(10)——RMySQL查询表数据dbReadTable/dbGetQuery/ dbSendQuery

文章目录RMySQL查询表数据dbReadTable/dbGetQuery/ dbSendQueryA 查看数据库中表信息B 查询表数据的几种方法如下:1、使用RMySQL的函数查询表数据2、使用SQL语句查询表数据3、使用dbSendQuery查询数据4、批量查询数据RMySQL查询表数据dbReadTable/dbGetQuery/ dbSendQueryA 查看数据库中表信息dbLis...
原创
366阅读
0评论
0点赞
发布博客于 2 年前

R+MySQL数据库的学习笔记(9)——RMySQL连接数据库的代码基本结构【模板】

文章目录RMySQL连接数据库的代码基本结构【模板】RMySQL连接数据库的代码基本结构【模板】library(RMySQL)#建立本地连接:获取连接信息,查看database下所有表con <- dbConnect(MySQL(),host="localhost",dbname="d_sample",user="root",password="123456")#设置连接字符编码...
原创
81阅读
0评论
0点赞
发布博客于 2 年前

R+MySQL数据库的学习笔记(8)——RMySQL查看数据库中表信息、表字段、表数据

文章目录5-RMySQL查看数据库中表信息、表字段、表数据5-RMySQL查看数据库中表信息、表字段、表数据1)查看数据库中表信息dbListTables(conn) #列出数据库d_sample中的所有表名称2)查看student表字段dbListFields(conn,“student”)3)查看student表数据studata=dbGetQuery(conn,“selec...
原创
205阅读
0评论
0点赞
发布博客于 2 年前

R+MySQL数据库的学习笔记(7)——dbGetQuery和dbSendQuery设置连接字符编码utf-8或gbk

文章目录R+MySQL数据库的学习笔记(7)——RMySQL的初级入门(3)设置连接字符编码查询字符集信息:R+MySQL数据库的学习笔记(7)——RMySQL的初级入门(3)设置连接字符编码修改字符集编码方法:1)dbGetQuery(conn,“SET NAMES utf8”) #gbk2)dbSendQuery(conn,‘SET NAMES gbk’)查询字符集信息:d...
原创
797阅读
0评论
0点赞
发布博客于 2 年前

R+MySQL数据库的学习笔记(6)——RMySQL的初级入门(2)

文章目录R+MySQL数据库的学习笔记(6)——RMySQL的初级入门(2)RMySQL的连接dbConnect()函数使用方法一:方法二:方法三:R+MySQL数据库的学习笔记(6)——RMySQL的初级入门(2)RMySQL的连接dbConnect()函数使用首先加载RMySQL包:library(RMySQL)然后实现MySQL数据库连接,下面给出3种连接方法方法一:con ...
原创
107阅读
0评论
0点赞
发布博客于 2 年前

R+MySQL数据库的学习笔记(5)——RMySQL的初级入门(1)

文章目录RMySQL的初级入门一、简介二、RMySQL的初级入门第一步:在MySQL中创建数据库database/schema和创建数据库表Table第二步:使用R软件读取第一步创建的数据表信息第三步:如何设置字符集编码(即设置中文显示)RMySQL的初级入门一、简介MySQL是一款最常用到开源数据库软件,安装简单,运行稳定,非常适用于中小型的数据存储。R作为数据分析的工具,当然要支持数据...
原创
168阅读
0评论
0点赞
发布博客于 2 年前

PyQt5学习笔记05——自定义输入代码快捷方式(叫PyCharm活动模板“Live Templates”)

文章目录自定义输入代码快捷方式(叫活动模板“Live Templates”)1、什么是活动模板“Live Templates”?2、如何创建“活动模板”?2.1 首先构建自己的代码框架2.2 复制所有代码——>打开File——>Settings——>Editor——>Live Templates2.3 选择Python选项,点击>符号,然后点击右边的“+”号创建新的“...
原创
171阅读
1评论
1点赞
发布博客于 2 年前

PyQt5学习笔记04——顶层窗口(也叫父控件/独立控件)的创建及理解

文章目录【标题】顶层窗口(也叫父控件/独立控件)的创建及理解1、什么是顶层窗口?2、主窗口与顶层窗口的区别3、什么是父控件?4、通过一个简单例子理解顶层窗口和顶层控件1. 首先,在应用程序中创建一个空白窗口(使用QWidget控件创建);2. 再创建一个“按钮QPushButton”控件,同样没有父控件,它会以一个独立窗口显示。3. 再创建一个“标签QLabel”控件,并设置控件属性和显示;5、创...
原创
420阅读
0评论
0点赞
发布博客于 2 年前

R+MySQL数据库学习笔记(002)——数据库IDE软件Navicat的下载及安装

文章目录数据库IDE软件Navicat的下载及安装一、上面的软件和激活文件下载二、Navicat的安装步骤2.1 首先安装Microsoft Visual C++ 2017 Redistributable (x86 & x64)2.2 安装Navicat Premium 12.0.18简体中文64位【根据自己电脑系统选择64位还是32位】2.3 激活:Navicat Premium 12....
原创
90阅读
0评论
0点赞
发布博客于 2 年前

R+MySQL数据库学习笔记(001)——MySQL数据库软件的下载及安装

文章目录MySQL数据库软件的下载及安装一、下载MySQL软件二、MySQL的安装第一步:选择一个目录,并创建一个空的文件用于存放MySQL安装文件包;第二步:将下载的mysql-8.0.17-winx64压缩文件解压,到第1步创建的文件夹MySQL中;第三步:打开mysql-8.0.17-winx64文件夹,在其中创建一个my.ini配置设置文件;第四步:配置MySQL的系统环境变量的路径;第五...
原创
96阅读
0评论
0点赞
发布博客于 2 年前

R+MySQL数据库学习笔记(3)——第二种连接方法:R+DBI+RMySQL

文章目录第二种:R+DBI+RMySQL一、DBI和RMySQL下载及安装的具体操作过程s1. DBI下载s2. RMySQL下载s3. 将DBI和RMySQL压缩文件复制粘贴到R语言安装目录下(此步可有可无)s4. 安装DBI和RMySQL二、测试R+DBI+RMySQL数据库是否连接成功第二种:R+DBI+RMySQL必备软件和工具:1)DBI2)RMySQL一、DBI和RMySQ...
原创
473阅读
0评论
1点赞
发布博客于 2 年前

R+MySQL数据库学习笔记(2)——第一种连接方法:R+RODBC

文章目录标题: 第一种R连接数据库的方法:R+RODBC3.1 安装 RTools并配置环境变量 283.2 mySQL ODBC包下载及安装 303.2 RODBC包下载及安装 35标题: 第一种R连接数据库的方法:R+RODBC第一种方法需要安装的必备工具:1、R平台: RGui(即R软件自带IDE)、RStudio2、数据库必备软件和工具:1)Rtools2)mysql-co...
原创
175阅读
0评论
0点赞
发布博客于 2 年前

R+MySQL数据库学习笔记(1)——R软件与RStudio下载及安装过程

R软件下载及安装过程一、R软件下载下载地址:https://cran.r-project.org/图 1 R软件下载页面下载之后是.exe执行文件,不是zip压缩格式文件,可以直接点击安装。二、R软件安装过程一直向下执行,直到安装完毕。最后一步是设置系统环境变量:三、Rstudio下载及安装过程下载地址:https://www.rstudio.com/product...
原创
403阅读
0评论
2点赞
发布博客于 2 年前

R+MySQL数据库的学习笔记(4)——odbcConnect的使用

1、odbcConnect的使用在加载RODBC包之前,首先得设置数据源,设置过程如下:(1)打开控制面板——选择系统和安全(2)选择管理工具(3)选择ODBC数据源(64位)(4)打开之后,选择“用户DSN”项,然后点击“添加”按钮。(5)点击添加之后,弹出如下界面(6)选择安装数据源的驱动程序,选择“MySQL ODBC 8.0 Unicode Driver”;【这必须是...
原创
479阅读
0评论
1点赞
发布博客于 2 年前

R软件下载及安装过程

一、R软件下载下载地址:https://cran.r-project.org/图 1 R软件下载页面下载之后是.exe执行文件,不是zip压缩格式文件,可以直接点击安装。二、R软件安装过程一直向下执行,直到安装完毕。最后一步是设置系统环境变量:三、Rstudio下载及安装过程下载地址:https://www.rstudio.com/products/rstudio/downl...
原创
11832阅读
0评论
4点赞
发布博客于 2 年前

PyQt5学习笔记03——GUI程序的基本结构

GUI程序的基本结构基本结构如下:# 导入需要的包from PyQt5.Qt import *import sysapp = QApplication(sys.argv) #创建一个应用程序(比不可少的)=============代码主功能模块区=================#控件操作 #窗口显示=================================...
原创
201阅读
0评论
0点赞
发布博客于 2 年前

PyQt5学习笔记02——sys、sys.argv和sys.exit的解释说明

sys、sys.argv和sys.exit的解释说明如下代码中有3处使用了sys,那它到底有何用呢?# 导入需要的包from PyQt5.Qt import *import sysapp = QApplication(sys.argv) #创建一个应用程序(比不可少的)#控件操作window =QWidget() #创建一个窗体window.setWindowTitle(...
原创
1342阅读
0评论
0点赞
发布博客于 2 年前

PyQt5学习笔记01——显示一个窗口

使用PyQt5编程显示一个窗口UI设计要求:1)设计一个界面,有标题、有最小号、最大化和关闭按钮、界面上有一个标签,具体如下图所示:2)窗口大小为(500,500);3)窗口标题名为:第一个PyQt5窗口设计实例;4)标签的名称为:Hello Word!5)方式:纯手动编写代码。【具体代码如下:】# -*- coding: utf-8 -*-"""-----"""# 导入需...
原创
239阅读
0评论
2点赞
发布博客于 2 年前

PyQt5学习笔记00——GUI编程+PyQt5库

1、GUI编程需要学习那些知识?1) 了解GUI库(如PyQt5)2)了解基本程序结构可通过一个简单的GUI程序,了解GUI的界面设计、代码实现、编译、执行和最后界面的实现(即可看到自己设计的界面)。可参考PyQt5的安装过程1908。3)掌握各种控件的特性、样式和使用方法;4)资源的加载;5)控件的布局;6)事件和信号;7)动画特效;8)界面跳转;9)设计工具使用(辅助界...
原创
233阅读
0评论
0点赞
发布博客于 2 年前

PyQt5学习笔记00——PyQt5的安装过程1908

PyQt5的安装过程1、PyQt5的下载及安装方式一》在网上下载exe安装文件,直接安装Qt designer软件。网址: PyQt5的设计器下载地址网址页面如下:下载完成之后直接安装,安装路径选择:其中有一步需要选择你电脑上对应的python文件路径,如下所示D:\ProgramFiles2019(64)\Python3.7.3\Lib\site-packages选择此目录是...
原创
352阅读
0评论
3点赞
发布博客于 2 年前

PyQt5学习笔记00——pip使用简介

pip使用简介【转载】安装pip环境以及pip常用命令使用【转载】安装pip环境以及pip常用命令使用1、去到Python的官网下载pip包,下载地址是:https://pypi.python.org/pypi/pip#downloads2、下载完成之后,解压到一个文件夹,用CMD控制台进入解压目录,输入:python setup.py install3、安装好之后,我们直接在命令行输入...
原创
234阅读
0评论
0点赞
发布博客于 2 年前

使用Excel统计计算成绩方法

1、使用Excel统计班级成绩分布原文出自此处:ExtendOffice频率分布是统计值在一定范围内出现的频率的总结,例如,B列包含分数,D2:E6是您自己指定的分数频带,频率列获得值是基于频带而发生的。 本文将介绍如何根据您定义的特定波段来计算频率分布。用Excel中的Frequency函数计算频率分布实际上,Excel中有一个内置的频率函数,可以帮助您计算在指定值的范围内发生值的频率...
转载
3046阅读
1评论
1点赞
发布博客于 2 年前

Python学习笔记01—Python的Web开发简介

Python学习笔记01—Python的Web开发简介文章目录Python学习笔记01—Python的Web开发简介一、Web开发简介二、Python开发网页==========一、Web开发简介Web即网站,分为:网页部分逻辑部分前台后台负责与用户交互、显示数据、用HTML显示数据、Css控制格式、JS复杂交互可用Python或PHP语言编写后台代码C...
原创
600阅读
0评论
2点赞
发布博客于 3 年前

数据库操作系统——Visual FoxPro 6.0安装步骤

数据库操作系统——Visual FoxPro 6.0安装步骤Visual FoxPro数据库操作系统软件有很多版本,但最经典的是VF6.0版本,现在也有许多使用VF9.0,且大多数教材都是使用VF9.0作为实验平台。VF9.0安装大家可以自己下去尝试安装,它的使用和VF6.0差不多,只是部分功能增多了,但对于教学已足够了。下面我们主要介绍VF6.0的安装步骤:视频教程链接:http://o...
原创
6674阅读
1评论
0点赞
发布博客于 3 年前

基于TensorFlow的K近邻(KNN)分类器实现——以MNIST为例

KNN分类原理TF的KNN代码KNN分类原理请参考相关文章: https://blog.csdn.net/longgb123/article/details/53004621 https://blog.csdn.net/Jake_cai/article/details/70168800 https://www.cnblogs.com/mfmdaoyou/p/6930...
原创
1556阅读
0评论
0点赞
发布博客于 3 年前

基于TensorFlow的最近邻(NN)分类器——以MNIST识别为例

一、最近邻分类理论二、TF在CPU上实现NN分类一、最近邻分类理论可以参考:这里写链接内容 https://wenku.baidu.com/view/d0924523a45177232e60a201.html https://www.cnblogs.com/bugsheep/p/7879407.html http://advkwo.blog.163.com/blog...
原创
692阅读
1评论
0点赞
发布博客于 3 年前

分布式计算——异步计算

一、基本概念二、多线程三、多进程3.1、子进程(subprocess包)3.2、多进程(multiprocessing包)四、消息队列1.生产消费实例 Queue 单向进行,即生产者只进行发消息,消费者只进行收2.通过Mutiprocess里面的Pipe来实现消息队列:3 Python提供了Queue模块来专门实现消息队列Queue对象5、Te...
原创
786阅读
0评论
1点赞
发布博客于 3 年前

TensorFlow的Saver保存类

一、Saver的介绍 有时可能只需要保存或者加载部分变量。 比如,可能有一个之前训练好的5层神经网络模型,但现在想写一个6层的神经网络,那么可以将之前5层神经网络中的参数直接加载到新的模型,而仅仅将最后一层神经网络重新训练。 为了保存或者加载部分变量,在声明tf.train.Saver类时可以提供一个列表来指定需要保存或者加载的变量。比如在加载模型的代码中使用saver = tf.trai...
原创
179阅读
0评论
0点赞
发布博客于 3 年前

基于CNN的MNIST手写数字识别

CNN的具体理论知识可到百度或CSDN的其他博客中查找相关内容,下面主要给出完整的代码(代码源于“莫烦python”视频,https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-06-save/):"""使用TF的CNN网络分类MNISTCNN结构:input——Conv1+maxpool——&gt;Conv...
原创
1345阅读
0评论
0点赞
发布博客于 3 年前

CIFAR彩色图像分类数据集

一、CIFAR数据集介绍 1.1 CIFAR-10 数据集图像个数:60000张彩色图像;其中Train sets:50000;Test sets:10000,(测试批的数据里,取自10类中的每一类,每一类随机取1000张,抽剩下的就随机排列组成了训练批) Class: 共10类,分别是: 飞机airplane、小汽车automobile、卡车truck、轮船ship、马horse、 猫...
原创
3411阅读
1评论
3点赞
发布博客于 3 年前

如何使用Dropout去防止过拟合

一、Dropout的介绍 dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。dropout是CNN中防止过拟合提高效果的一个大杀器,但对于其为何有效,却众说纷纭。 Dropout的思想是训练整体DNN,并平均整个集...
原创
2218阅读
0评论
0点赞
发布博客于 3 年前

基于softmax回归的MNIST分类

MNIST是在机器学习领域中的一个经典问题。为了学习机器学习和TensorFlow库的使用,使用TF构造一个softmax回归网络模型去识别手写数字。以下内容请参考TensorFlow中文社区(http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html) 1)MNIST介绍 2)softmax回归介绍 3)回归模型的训练和评估...
原创
977阅读
0评论
0点赞
发布博客于 3 年前

改善过拟合方法

我们在线性拟合或神经网络学习过程中,都会遇到过拟合或欠拟合问题,那么我们如何解决这个问题呢? 解决过拟合的常用方法有: 1)增加训练样本数据量; 2)使用正则化(正规化)方法(L1,L2)改善过拟合;此方法适用于大多数ML和NN,做法都差不多; 3)在NN中,可使用Dropout正规化方法,就是在NN网络中,我们忽略一些神经元,是这个NN变得不完整,训练一次,到了第2此,在随机忽略一些神经...
原创
890阅读
0评论
2点赞
发布博客于 3 年前

MNIST手写数字数据集读取方法

MNIST是一个非常有名的手写体数字识别数据集,在很多资料中,这个数据集都会被用作深度学习的入门样例。 数据集下载网址:http://yann.lecun.com/exdb/mnist/ 数据集简介: 1、共有4数据集,下载之后并将其解压保存在磁盘中(最好放在你代码执行目录下,方便后期使用。)如新建一个文件夹D:*****\MNIST_data存放数据。 train-images-idx3...
原创
99070阅读
16评论
99点赞
发布博客于 3 年前

【转载】2018衡水中学高考成绩再次刷爆朋友圈,文末衡水版《凉凉》别有一番滋味!

衡中 http://www.sohu.com/a/240595137_546437来源:中国教育在线衡水中学每年的高考成绩都是能对得起它的名气的,2018,衡水中学再次刷爆人们的眼球!话不多说,我们先来感受下这组数据。12018衡水中学高考喜报小磊哥再为大家汇总一下这个神奇的高考工厂历年的傲人成绩,还有其背后的故事,一起来看看吧。2017年,衡水中学考上清华北大的人数是17...
转载
1018阅读
0评论
0点赞
发布博客于 3 年前

在PyQt5设计的GUI界面中显示matplotlib绘制的图形

一、matplotlib如何嵌入PyQt5中?通过matplotlib.backends.backend_qt5agg类连接PyQt5。在实际代码中,我们需要在引用部分加入内容:import matplotlibmatplotlib.use("Qt5Agg") # 声明使用QT5from matplotlib.backends.backend_qt5agg import Figure...
原创
52621阅读
32评论
46点赞
发布博客于 3 年前

Qt5的QEvent事件类

QEvent类继承关系:Qt5.QEvent.QTimerEvent 定时器事件 QMouseEvent 鼠标事件 QWheelEvent 滑动鼠标滑轮事件 QTabletEvent QKeyEvent 键盘事件 QFocusEvent 焦点事件 ...
原创
5968阅读
1评论
4点赞
发布博客于 3 年前

PyQt5学习笔记1:零星使用技巧汇总

在使用MainWindow中的一些技巧【注意:1)尺寸值不包括标题栏的高度和边框的宽度。2)尺寸和设定的样式有关。不同电脑中可用不同的字体及大小,所以,最好不要使用固定尺寸。 3)由于某些函数的调用会使窗口的尺寸发生变化。】 1。设置窗口最小化和最大化大小:* self.setMinimumSize(0,0) self.setMaximumSize(width,height) s...
原创
1062阅读
0评论
0点赞
发布博客于 3 年前

PyQt5的表格创建

PyQt5中有两种创建表格的控件:Table View和Table Widget。1、Table WidgetQTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC、C#中的DataGrid。 pyqt5的tablewidget组件比较特殊,每个方格可以装载其他组件来搭配实现不同的效果,所以在qtdesigner上找不到可视化直接设置mask或者其他可以限制填入单...
原创
8822阅读
0评论
4点赞
发布博客于 3 年前

PyQt5+Qt Designer如何实现不同对话框之间调用?

在学习PyQt5+Qt Designer过程中,在QInputDialog对话框中或QMessageBox消息框中,点击按钮Button都会自动弹出一个对话框,这些对话框都是系统自带的,现在我们需要自定义一个“弹出对话框”,参考了网上一些例子,可使用代码编写的形式创建主窗口和子窗口,然后经过信号和槽函数调用来实现,具体实例可参考: 1、各位大神,求问pyqt5如何实现点击一个按钮跳出另一个窗口?...
原创
4301阅读
0评论
1点赞
发布博客于 3 年前

PyQt5的输入对话框使用(QInputDialog)

PyQt5中QInputDialog的使用,Qt的QInputDialog类提供了一种简单方面的对话框来获得用户的单个输入信息,它提供了4种数据类型的输入: 1)字符串型(方法=QInputDialog.getText); 2)Int类型数据(方法=QInputDialog.getInt); 3)double类型数据(方法=QInputDialog.getDouble); 4)下拉列表框的...
原创
22475阅读
1评论
4点赞
发布博客于 3 年前

Widget/Dialog/MainWindow等窗口的主函数代码编写模板

涉及工具: Python3.6 pycharm3+PyQt5+Qt designer 在新建的.py文件中调用由Qt设计器创建的窗口经ui转换为py代码文件,并显示窗口和添加控件的信息和槽函数,则.py文件的代码模板如下: 【各种类型窗口的子函数代码可自动生成:Qt designer创建窗口——保存为.ui文件——将ui文件通过PyUI工具转为.py文件——即可得到窗口的代码】 【主函数...
原创
1014阅读
0评论
0点赞
发布博客于 3 年前

PyQt5+pycharm获得对话框的位置、大小信息并显示在对话框中

过程简介使用Qt Designer创建一个无button的对话框窗口;并在对话框中添加9行2列的QLabel标签控件,如下图所示 右边列的QLabel控件名称全部变为空,且将其ObjectName改为: xlabel ylabel framegeolabel poslabel widthlabel heightlabel rectlabel sizelabel保存对话...
原创
2470阅读
0评论
0点赞
发布博客于 3 年前

基于python的GUI开发—环境IDE/开发框架/库等

在这里介绍两种方法:第一种:pycharm+PyQt5+python3.6的python GUI开发环境1.1 下载1、pycharm下载(下载Community版Version: 2017.3.3): https://www.jetbrains.com/pycharm/download/#section=windows(https://www.jetbrains.com/p...
原创
1686阅读
1评论
0点赞
发布博客于 3 年前

Eclipse中安装Java Opencv

1、第一步,下载OpenCV3.3.1,下载地址为: https://opencv.org/releases.htmlIntroduction to Java Development(Java的opencv开发文档): https://docs.opencv.org/2.4.4-beta/doc/tutorials/introduction/desktop_java/java_dev_int
原创
187阅读
0评论
0点赞
发布博客于 3 年前

Java第三方工具库/包汇总

一、科学计算或矩阵运算库科学计算包:JMathLib是一个用于计算复杂数学表达式并能够图形化显示计算结果的Java开源类库。它是Matlab、Octave、FreeMat、Scilab的一个克隆,但完全采用纯Java实现。JSci:Java 科学对象(JSci)开放源代码项目是 Durham(英国 Durham)大学粒子理论中心的三年级研究生 Mark Hale 创立的。JSci
原创
34059阅读
1评论
26点赞
发布博客于 3 年前

支持C/C++、Java、python、Matlab等语言的第三方机器学习库汇总

C通用机器学习Recommender - 一个产品推荐的C语言库,利用了协同过滤.计算机视觉CCV - C-based/Cached/Core Computer Vision Library ,是一个现代化的计算机视觉库。 VLFeat - VLFeat 是开源的 computer vision algorithms库, 有 Matlab toolbox。C++
转载
2353阅读
0评论
0点赞
发布博客于 3 年前

软件开发模型

软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。 软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。 软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。 对于不同的软件系统,可以采用不同的开发方法、使用不同的程序设计语言以及各种不同技能的人员参与工作、运用不同的
原创
424阅读
0评论
3点赞
发布博客于 3 年前

A1 软件需求分析

软件需求分析就是把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素。需求分析是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。1 软件需求分析需求分析三阶段:需求提出、需求描述及需求评审。 【需求提出】:主要集中于描述系统目的。需求提出和分析仅仅集中在使用者对系统的观点上。开发人员和用户确
原创
268阅读
0评论
1点赞
发布博客于 3 年前

软件项目开发过程

本文部分转自:人生如轻尘栖弱草 源文件出自一、开发流程图二、过程产物及要求本表主要列出开发阶段需要输出的过程产物,包括产物名称、成果描述、负责人及备注,即谁、在什么时间、应该提供什么内容、提供内容的基本方向和形式是什么。项目启动阶段产物名称成果描述负责人调研文档了解项目背景,了解项目干系人目标方向产品经理团队组建确认团队人员及配置产品总监业务梳理明确项目的目
转载
510阅读
0评论
1点赞
发布博客于 3 年前

数据结构

1、数据结构数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。数据元素相互之间的关系称为结构。1. 数据的逻辑结构: 指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。逻辑结构包括:集合、线性结构、树形结构、图状结构; 1)集合结构:除了同属于一种类型外,别无其它关系2
原创
440阅读
0评论
1点赞
发布博客于 3 年前

Java中安装python插件

已有平台:python3.6、JDK、Eclipse4.7.2 现在需要在Eclipse4.7.2上安装PyDev(即运行python代码的插件)? 安装步骤: 第一步:找到pydev软件的地址:http://www.pydev.org/update_sites/ 复制最新版网址备用。 第二步:打开Eclipse软件; 第三步:打开help——install new softwar
原创
580阅读
0评论
0点赞
发布博客于 3 年前

Java开发工具下载与安装

Java开发工具使用集成开发工具IDE: Eclipse和NetBeans【根据自己喜欢选择,不过Eclipse比NetBeans好用】Eclipse的安装过程:第一步:先安装JDK,因为Eclipse的运行是依赖于JDK或JRE的,又JDK中附带有JRE,所以必须先安装JDK。 下载地址(官网): http://www.oracle.com/technetwork/java/
原创
400阅读
0评论
1点赞
发布博客于 3 年前

JAVA学习路线图

http://www.cnblogs.com/biehongli/p/5754555.html
转载
112阅读
0评论
0点赞
发布博客于 3 年前

基于Java的项目开发过程

完整项目开发过程 原型的设计有产品经理负责。 界面的美化有专门的美工负责。 前端有专门的前端开发人员负责。 研发:研发主要工作就是根据项目的需求文档设计系统架构、设计数据库、编写调试程序代码。对于普通的码农来说,主要的就是编写和调试程序。基于Java的项目开发: 1、要想编写程序,需要一个能编写源代码的编辑工具。例如:Notepad++; 2、要想测试程序,需要一个编译、执行
转载
6520阅读
0评论
2点赞
发布博客于 3 年前

Java基础01

1、Java介绍Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。 Java分为三个体系:1)JavaSE(J2SE)=Java SE(Java2 Platform Standard Edition,java平台标准版) 【它允许开发和部署
原创
239阅读
0评论
0点赞
发布博客于 3 年前

numpy中的matrix矩阵处理

这里写链接内容 numpy模块中的矩阵对象为numpy.matrix,包括矩阵数据的处理,矩阵的计算,以及基本的统计功能,转置,可逆性等等,包括对复数的处理,均在matrix对象中。 class numpy.matrix(data,dtype,copy):返回一个矩阵,其中data为ndarray对象或者字符形式;dtype:为data的type;copy:为bool类型。
转载
397阅读
0评论
0点赞
发布博客于 3 年前

2017年度15个最好的数据科学领域Python库

[这里写链接内容]((https://mp.weixin.qq.com/s/2xjdP7q3WibmWuAEIZBITA?utm_source=tuicool&utm_medium=referral) 由于近年来Python已经在数据科学领域引起了很大的关注,我想根据最近的经验,为数据科学家和工程师列出一些最有用的库。由于所有的库都是开源的,我们增加了来自Github的提交,贡献者,计数和其
转载
381阅读
0评论
0点赞
发布博客于 3 年前

python的时间操作

python的程序执行时间计算模块:一 datetime【获取当前计算机的时间:年月日星期小时分钟秒微秒,时区等,代码如下:from datetime import datetimeprint('today():' , datetime.today()) print('now():' , datetime.now()) 】 datetime模块中包含以下类:
原创
763阅读
0评论
1点赞
发布博客于 3 年前

numpy的属性和函数

NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(通常是元素是数字)。在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。 例如,在3D空间一个点的坐标[1, 2, 3]是一个秩为1的数组,因为它只有一个轴。那个轴长度为3.又例如,在以下例子中,数组的秩为2(它有两个维度).第一个维度长度为2
原创
722阅读
0评论
0点赞
发布博客于 3 年前

numpy学习笔记(1)

Numpy的介绍一、NumPy简介 NumPy的全名为Numeric Python,是一个开源的Python科学计算库,它包括: 一个强大的N维数组对象ndrray; 比较成熟的(广播)函数库; 用于整合C/C++和Fortran代码的工具包; 实用的线性代数、傅里叶变换和随机数生成函数 NumPy的优点对于同样的数值计算任务,使用NumPy要比直接编写Python代码便捷得
原创
1136阅读
0评论
1点赞
发布博客于 3 年前

【转载:80个Python经典资料(教程+源码+工具)汇总】

80个Python经典资料(教程+源码+工具)汇总大家好,51CTO下载中心根据资料的热度和好评度收集了80个Python资料,分享给Python开发的同学。内容包括1个Python专题、66个学习资料、7套Python源码和6个相关软件。附件较多,无法一一分享,在此大家整理一个下载目录了,可以保存以备后用,需要时可选择性下载。附件下载地址:http://down.51cto.com/da
转载
6811阅读
0评论
1点赞
发布博客于 3 年前

转载:49个python经典电子书

【转载:49个python经典电子书】http://blog.sina.com.cn/s/blog_653f5cb20101fz8h.htmlPython语法简捷而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特
转载
5077阅读
1评论
1点赞
发布博客于 3 年前

wxpython_GUI学习笔记(5)——wx.Frame学习

【转载博主麦兜搞IT:http://blog.sina.com.cn/s/blog_4b5039210100ez54.html】因为笔记主要是摘自《wxpython in action》,很多名词我怕翻译不准,就直接用英文原文来代替,就像今天的top-level window object 和subwindow object ,这里暂时叫顶层窗口对象和子窗口对象。    首先看
转载
6688阅读
1评论
0点赞
发布博客于 3 年前

wxpython_GUI学习笔记(4)——wxFormBuilder

一 简介:wxFormBuilder 是一个基于 wxWidgets 的 UI 设计的快速开发工具。红线圈起部分是:wxFormBuilder使用拖拽方式添加控件、按钮和其他功能事件等,当界面设计完成之后,它可以自动生成C++、python、PHP、LUA和XRC等语言代码。二 wxPython界面设计器——wxfor
原创
7282阅读
0评论
0点赞
发布博客于 3 年前

wxpython_GUI学习笔记(2)——认识wxpython

wxPython是Python编程语言的一个GUI工具箱。他使得Python程序员能够轻松的创建具有健壮、功能强大的图形用户界面的程序。它是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。  和Python语言与wxWidgets GUI工具库一样,wxPython是开源软件。这意味着任何人都可以免费地使用它并且可以查看和修改它
原创
699阅读
0评论
0点赞
发布博客于 3 年前

Python_GUI学习笔记(3)wxPython的简单界面设计

第一次接触到wxpython,在网上找到一个简单的界面显示代码,复制到spyder3编辑中进行运行出现错误,(“module 'wx' has no attributte 'App'”),但在python3.6的IDLE编辑器上运行没有错误。具体程序如下:import wxapp = wx.App()frame = wx.Frame(None,title="my GUI")fram
原创
7194阅读
0评论
0点赞
发布博客于 3 年前

Python_GUI学习笔记(1)----GUI界面设计开发库

我是使用Anaconda的spyder作为python程序编辑器,在安装anaconda之后就自带了python的图像设计标准库Tkinter,此库设计界面不够方便和美观。现在经常使用的第三方库且比较好用、效果较好的是:pyQT和wxPython。1. tkInter这是 Python 做的 tk/tcl 的壳。tk/tcl 有着广泛的应用,据说用户群体很庞大。这个是 Python 官方承认的标准...
原创
8065阅读
1评论
1点赞
发布博客于 3 年前

各种聚类算法的比较

聚类的目标是使同一类对象的相似度尽可能地大;不同类对象之间的相似度尽可能地小。目前聚类的方法很多,根据基本思想的不同,大致可以将聚类算法分为五大类:层次聚类算法、分割聚类算法、基于约束的聚类算法、机器学习中的聚类算法和用于高维度的聚类算法。摘自 数据挖掘中的聚类分析研究综述 这篇论文。1、层次聚类算法1.1聚合聚类1.1.1相似度依据距离不同:Single-Link:最近距
转载
13248阅读
0评论
6点赞
发布博客于 4 年前

计算机基础上机操作题--Excel和PPT

每一个都是我花时间整理出来的100多道上机操作习题。对初学者、考计算机二级或上这门课的老师都非常有用。
application/x-rar
发布资源于 11 年前

计算机基础上机操作题--windows和word

全是windows和word的上机操作题,是我花时间整理出来的,每一个都有100多个题目,对初学者和上这门课的老师都非常有用。
application/x-rar
发布资源于 11 年前

大学一年级计算机信息基础课件

非常好的一个计算机基础学习课件,包括:windows,word,excel和ppt等。
application/x-rar
发布资源于 11 年前

计算机信息技术基础课件

计算机信息基础与应用基础的PPT课件,任何大学生都要学的基础课程。是非常有用的。
application/x-zip
发布资源于 11 年前

支持向量机和遗传算法原理与应用

统计学习理论和支持向量机被视为机器学习问题的一个基本框架,传统的方法都可以看作是SVM方法的一种实现 有坚实的理论基础和严格的理论分析
application/x-rar
发布资源于 12 年前

线性感知器程序设计方法

用MATLAB编写的三种线性感知器程序,相信该资料对你一定有用,比较完整。
application/x-rar
发布资源于 12 年前

图像处理--插值旋转算法

讲述了在图像旋转中所使用的几种插值算法。有程序源代码,和检测图像等。
application/x-rar
发布资源于 12 年前

图像处理---图像细化算法

用VC++别写的图像二值化后,再细化的原代码。
application/msword
发布资源于 12 年前

VC++的图像处理--细化程序代码

用VC++别写的图像二值化后,再细化的原代码。
application/msword
发布资源于 12 年前

VC++的图像细化程序代码

用VC++别写的图像二值化后,再细化的原代码。
application/msword
发布资源于 12 年前

基于自适应背景差的运动目标检测、跟踪方法

该资料使用时间差分、背景差、自适应背景更新等方法进行运动目标跟踪。
application/x-rar
发布资源于 12 年前

中国少数民族统计学数据

主要是对贵州省少数民族地区的数据分析.中国少数民族人口及主要分布地区;医学数据仓库与数据挖掘。
application/x-rar
发布资源于 12 年前

图象增强中k均值算法程序

灰度最相近的K个邻点平均法: % 该算法的出发点是:在n×n的窗口内,属于同一集合体的像素,它们的灰度值将高度相关。 % 因此,可用窗口内与中心像素的灰度最接近的K个邻像素的平均灰度来代替窗口中心像素的灰度值。这就是灰度最相近的K个邻点平均法。 % 较小的K值使噪声方差下降较小,但保持细节效果较好;而较大的K值平滑噪声较好,但会使图像边缘模糊。 % 实验证明,对于3×3的窗口,取K=6为宜.
text/plain
发布资源于 13 年前

图像直方图均衡化处理程序

重点掌握数字图像处理的基本概念、系统组成、特点及应用。重点掌握数字图像处理的基本概念、系统组成、特点及应用。
application/x-rar
发布资源于 13 年前

计算机数字图像处理技术课件

要求学生了解数字图像处理的主要内容及相关知识,熟悉数字图像处理与其他学科的关系;
application/x-rar
发布资源于 13 年前

图象处理中直方图均衡化处理

直方图变换 %一,图像的预处理,读入彩色图像将其灰度化 PS=imread('1.jpg'); %读入JPG彩色图像文件 imshow(PS) %显示出来 title('输入的彩色JPG图像') imwrite(rgb2gray(PS),'PicSampleGray.bmp'); %将彩色图片灰度化并保存 PS=rgb2gray(PS); %灰度化后的数据存入数组
application/msword
发布资源于 13 年前

图象处理二值图象的细化算法

细化算法的分类: 依据是否使用迭代运算可以分为两类:第一类是非迭代算法,一次即产生骨架,如基于距离变换的方法。游程长度编码细化等。第二类是迭代算法,即重复删除图像边缘满足一定条件的像素,最终得到单像素宽带骨架。迭代方法依据其检查像素的方法又可以再分成串行算法和并行算法,在串行算法中,是否删除像素在每次迭代的执行中是固定顺序的,它不仅取决于前次迭代的结果,也取决于本次迭代中已处理过像素点分布情况,而在并行算法中,像素点删除与否与像素值图像中的顺序无关,仅取决于前次迭代的结果。在经典细化算法发展的同时,起源于图像集合运算的形态学细化算法也得到了快速的发展。 Hilditch、Pavlidis、Rosenfeld细化算法:这类算法则是在程序中直接运算,根据运算结果来判定是否可以删除点的算法,差别在于不同算法的判定条件不同。 其中Hilditch算法使用于二值图像,比较普通,是一般的算法; Pavlidis算法通过并行和串行混合处理来实现,用位运算进行特定模式的匹配,所得的骨架是8连接的,使用于0-1二值图像 ;Rosenfeld算法是一种并行细化算法,所得的骨架形态是8-连接的,使用于0-1二值图像 。 后两种算法的效果要更好一些,但是处理某些图像时效果一般,第一种算法使用性强些。 索引表细化算法:经过预处理后得到待细化的图像是0、1二值图像。像素值为1的是需要细化的部分,像素值为0的是背景区域。基于索引表的算法就是依据一定的判断依据,所做出的一张表,然后根据魔鬼要细化的点的八个邻域的情况查询,若表中元素是1,若表中元素是1,则删除该点(改为背景),若是0则保留。因为一个像素的8个邻域共有256中可能情况,因此,索引表的大小一般为256。 图象细化算法代码: 下面是我在网上搜索到的一些细化算法的源码,只是为了自己学习方便,可能有错误。 【来 源】:http://blog.csdn.net/byxdaz/archive/2006/02/27/610835.aspx #include "StdAfx.h" #include <stdlib.h> #include <malloc.h> void beforethin(unsigned char *ip, unsigned char *jp, unsigned long lx, unsigned long ly) { unsigned long i,j; for(i=0; i<ly; i++) { for(j=0; j<lx; j++) { //这里要视前景是白点还是黑点而定,可以改动 //如果前景是白点,就是这样;反之反过来 if(ip[i*lx+j]>0) jp[i*lx+j]=1; else jp[i*lx+j]=0; } } } ///////////////////////////////////////////////////////////////////////// //Hilditch细化算法 //功能:对图象进行细化 //参数:image:代表图象的一维数组 // lx:图象宽度 // ly:图象高度 // 无返回值 void ThinnerHilditch(void *image, unsigned long lx, unsigned long ly) { char *f, *g; char n[10]; unsigned int counter; short k, shori, xx, nrn; unsigned long i, j; long kk, kk11, kk12, kk13, kk21, kk22, kk23, kk31, kk32, kk33, size; size = (long)lx * (long)ly; g = (char *)malloc(size); if(g == NULL) { printf("error in allocating memory!\n"); return; } f = (char *)image; for(i=0; i<lx; i++) { for(j=0; j<ly; j++) { kk="i"*ly+j; if(f[kk]!=0) { f[kk]=1; g[kk]=f[kk]; } } } counter = 1; do { printf("%4d*",counter); counter++; shori = 0; for(i=0; i<lx; i++) { for(j=0; j<ly; j++) { kk = i*ly+j; if(f[kk]<0) f[kk] = 0; g[kk]= f[kk]; } } for(i=1; i<lx-1; i++) { for(j=1; j<ly-1; j++) { kk="i"*ly+j; if(f[kk]!=1) continue; kk11 = (i-1)*ly+j-1; kk12 = kk11 + 1; kk13 = kk12 + 1; kk21 = i*ly+j-1; kk22 = kk21 + 1; kk23 = kk22 + 1; kk31 = (i+1)*ly+j-1; kk32 = kk31 + 1; kk33 = kk32 + 1; if((g[kk12]&&g[kk21]&&g[kk23]&&g[kk32])!=0) continue; nrn = g[kk11] + g[kk12] + g[kk13] + g[kk21] + g[kk23] + g[kk31] + g[kk32] + g[kk33]; if(nrn <= 1) { f[kk22] = 2; continue; } n[4] = f[kk11]; n[3] = f[kk12]; n[2] = f[kk13]; n[5] = f[kk21]; n[1] = f[kk23]; n[6] = f[kk31]; n[7] = f[kk32]; n[8] = f[kk33]; n[9] = n[1]; xx = 0; for(k=1; k<8; k="k"+2) { if((!n[k])&&(n[k+1]||n[k+2])) xx++; } if(xx!=1) { f[kk22] = 2; continue; } if(f[kk12] == -1) { f[kk12] = 0; n[3] = 0; xx = 0; for(k=1; k<8; k="k"+2) { if((!n[k])&&(n[k+1]||n[k+2])) xx++; } if(xx != 1) { f[kk12] = -1; continue; } f[kk12] = -1; n[3] = -1; } if(f[kk21]!=-1) { f[kk22] = -1; shori = 1; continue; } f[kk21] = 0; n[5] = 0; xx = 0; for(k=1; k<8; k="k"+2) { if((!n[k])&&(n[k+1]||n[k+2])) { xx++; } } if(xx == 1) { f[kk21] = -1; f[kk22] = -1; shori =1; } else f[kk21] = -1; } } }while(shori); free(g); } ///////////////////////////////////////////////////////////////////////// //Pavlidis细化算法 //功能:对图象进行细化 //参数:image:代表图象的一维数组 // lx:图象宽度 // ly:图象高度 // 无返回值 void ThinnerPavlidis(void *image, unsigned long lx, unsigned long ly) { char erase, n[8]; char *f; unsigned char bdr1,bdr2,bdr4,bdr5; short c,k,b; unsigned long i,j; long kk,kk1,kk2,kk3; f = (char*)image; for(i=1; i<lx-1; i++) { for(j=1; j<ly-1; j++) { kk = i*ly + j; if(f[kk]) f[kk] = 1; } } for(i=0, kk1=0, kk2=ly-1; i<lx; i++, kk1+=ly, kk2+=ly) { f[kk1]=0; f[kk2]=0; } for(j=0, kk=(lx-1)*ly; j<ly; j++,kk++) { f[j]=0; f[kk]=0; } c="5"; erase =1; while(erase) { c++; for(i=1; i<lx-1; i++) { for(j=1; j<ly-1; j++) { kk="i"*ly+j; if(f[kk]!=1) continue; kk1 = kk-ly -1; kk2 = kk1 + 1; kk3 = kk2 + 1; n[3] = f[kk1]; n[2] = f[kk2]; n[1] = f[kk3]; kk1 = kk - 1; kk3 = kk + 1; n[4] = f[kk1]; n[0] = f[kk3]; kk1 = kk + ly -1; kk2 = kk1 + 1; kk3 = kk2 + 1; n[5] = f[kk1]; n[6] = f[kk2]; n[7] = f[kk3]; bdr1 =0; for(k=0; k<8; k++) { if(n[k]>=1) bdr1|=0x80>>k; } if((bdr1&0252)== 0252) continue; f[kk] = 2; b="0"; for(k=0; k<=7; k++) { b+=bdr1&(0x80>>k); } if(b<=1) f[kk]=3; if((bdr1&0160)!=0&&(bdr1&07)!=0&&(bdr1&0210)==0) f[kk]=3; else if((bdr1&&0301)!=0&&(bdr1&034)!=0&&(bdr1&042)==0) f[kk]=3; else if((bdr1&0202)==0 && (bdr1&01)!=0) f[kk]=3; else if((bdr1&0240)==0 && (bdr1&0100)!=0) f[kk]=3; else if((bdr1&050)==0 && (bdr1&020)!=0) f[kk]=3; else if((bdr1&012)==0 && (bdr1&04)!=0) f[kk]=3; } } for(i=1; i<lx-1; i++) { for(j=1; j<ly-1; j++) { kk = i*ly + j; if(!f[kk]) continue; kk1 = kk - ly -1; kk2 = kk1 + 1; kk3 = kk2 + 1; n[3] = f[kk1]; n[2] = f[kk2]; n[1] = f[kk3]; kk1 = kk - 1; kk2 = kk + 1; n[4] = f[kk1]; n[0] = f[kk3]; kk1 = kk + ly -1; kk2 = kk1 + 1; kk3 = kk2 + 1; n[5] = f[kk1]; n[6] = f[kk2]; n[7] = f[kk3]; bdr1 = bdr2 =0; for(k=0; k<=7; k++) { if(n[k]>=1) bdr1|=0x80>>k; if(n[k]>=2) bdr2|=0x80>>k; } if(bdr1==bdr2) { f[kk] = 4; continue; } if(f[kk]!=2) continue; if((bdr2&0200)!=0 && (bdr1&010)==0 && ((bdr1&0100)!=0 &&(bdr1&001)!=0 || ((bdr1&0100)!=0 ||(bdr1 & 001)!=0) && (bdr1&060)!=0 &&(bdr1&06)!=0)) { f[kk] = 4; } else if((bdr2&040)!=0 && (bdr1&02)==0 && ((bdr1&020)!=0 && (bdr1&0100)!=0 || ((bdr1&020)!=0 || (bdr1&0100)!=0) && (bdr1&014)!=0 && (bdr1&0201)!=0)) { f[kk] = 4; } else if((bdr2&010)!=0 && (bdr1&0200)==0 && ((bdr1&04)!=0 && (bdr1&020)!=0 || ((bdr1&04)!=0 || (bdr1&020)!=0) && (bdr1&03)!=0 && (bdr1&0140)!=0)) { f[kk] = 4; } else if((bdr2&02)!=0 && (bdr1&040)==0 && ((bdr1&01)!=0 && (bdr1&04)!=0 || ((bdr1&01)!=0 || (bdr1&04)!=0) && (bdr1&0300)!=0 && (bdr1&030)!=0)) { f[kk] = 4; } } } for(i=1; i<lx-1; i++) { for(j=1; j<ly-1; j++) { kk = i*ly + j; if(f[kk]!=2) continue; kk1 = kk - ly -1; kk2 = kk1 + 1; kk3 = kk2 + 1; n[3] = f[kk1]; n[2] = f[kk2]; n[1] = f[kk3]; kk1 = kk - 1; kk2 = kk + 1; n[4] = f[kk1]; n[0] = f[kk3]; kk1 = kk + ly -1; kk2 = kk1 + 1; kk3 = kk2 + 1; n[5] = f[kk1]; n[6] = f[kk2]; n[7] = f[kk3]; bdr4 = bdr5 =0; for(k=0; k<=7; k++) { if(n[k]>=4) bdr4|=0x80>>k; if(n[k]>=5) bdr5|=0x80>>k; } if((bdr4&010) == 0) { f[kk] = 5; continue; } if((bdr4&040) == 0 && bdr5 ==0) { f[kk] = 5; continue; } if(f[kk]==3||f[kk]==4) f[kk] = c; } } erase = 0; for(i=1; i<lx-1; i++) { for(j=1; j<ly-1; j++) { kk = i*ly +j; if(f[kk]==2||f[kk] == 5) { erase = 1; f[kk] = 0; } } } } } ///////////////////////////////////////////////////////////////////////// //Rosenfeld细化算法 //功能:对图象进行细化 //参数:image:代表图象的一维数组 // lx:图象宽度 // ly:图象高度 // 无返回值 void ThinnerRosenfeld(void *image, unsigned long lx, unsigned long ly) { char *f, *g; char n[10]; char a[5] = {0, -1, 1, 0, 0}; char b[5] = {0, 0, 0, 1, -1}; char nrnd, cond, n48, n26, n24, n46, n68, n82, n123, n345, n567, n781; short k, shori; unsigned long i, j; long ii, jj, kk, kk1, kk2, kk3, size; size = (long)lx * (long)ly; g = (char *)malloc(size); if(g==NULL) { printf("error in alocating mmeory!\n"); return; } f = (char *)image; for(kk=0l; kk<size; kk++) { g[kk] = f[kk]; } do { shori = 0; for(k=1; k<=4; k++) { for(i=1; i<lx-1; i++) { ii = i + a[k]; for(j=1; j<ly-1; j++) { kk = i*ly + j; if(!f[kk]) continue; jj = j + b[k]; kk1 = ii*ly + jj; if(f[kk1]) continue; kk1 = kk - ly -1; kk2 = kk1 + 1; kk3 = kk2 + 1; n[3] = f[kk1]; n[2] = f[kk2]; n[1] = f[kk3]; kk1 = kk - 1; kk3 = kk + 1; n[4] = f[kk1]; n[8] = f[kk3]; kk1 = kk + ly - 1; kk2 = kk1 + 1; kk3 = kk2 + 1; n[5] = f[kk1]; n[6] = f[kk2]; n[7] = f[kk3]; nrnd = n[1] + n[2] + n[3] + n[4] +n[5] + n[6] + n[7] + n[8]; if(nrnd<=1) continue; cond = 0; n48 = n[4] + n[8]; n26 = n[2] + n[6]; n24 = n[2] + n[4]; n46 = n[4] + n[6]; n68 = n[6] + n[8]; n82 = n[8] + n[2]; n123 = n[1] + n[2] + n[3]; n345 = n[3] + n[4] + n[5]; n567 = n[5] + n[6] + n[7]; n781 = n[7] + n[8] + n[1]; if(n[2]==1 && n48==0 && n567>0) { if(!cond) continue; g[kk] = 0; shori = 1; continue; } if(n[6]==1 && n48==0 && n123>0) { if(!cond) continue; g[kk] = 0; shori = 1; continue; } if(n[8]==1 && n26==0 && n345>0) { if(!cond) continue; g[kk] = 0; shori = 1; continue; } if(n[4]==1 && n26==0 && n781>0) { if(!cond) continue; g[kk] = 0; shori = 1; continue; } if(n[5]==1 && n46==0) { if(!cond) continue; g[kk] = 0; shori = 1; continue; } if(n[7]==1 && n68==0) { if(!cond) continue; g[kk] = 0; shori = 1; continue; } if(n[1]==1 && n82==0) { if(!cond) continue; g[kk] = 0; shori = 1; continue; } if(n[3]==1 && n24==0) { if(!cond) continue; g[kk] = 0; shori = 1; continue; } cond = 1; if(!cond) continue; g[kk] = 0; shori = 1; } } for(i=0; i<lx; i++) { for(j=0; j<ly; j++) { kk = i*ly + j; f[kk] = g[kk]; } } } }while(shori); free(g); } ///////////////////////////////////////////////////////////////////////// //基于索引表的细化细化算法 //功能:对图象进行细化 //参数:lpDIBBits:代表图象的一维数组 // lWidth:图象高度 // lHeight:图象宽度 // 无返回值 BOOL WINAPI ThiningDIBSkeleton (LPSTR lpDIBBits, LONG lWidth, LONG lHeight) { //循环变量 long i; long j; long lLength; unsigned char deletemark[256] = { 0,0,0,0,0,0,0,1, 0,0,1,1,0,0,1,1, 0,0,0,0,0,0,0,0, 0,0,1,1,1,0,1,1, 0,0,0,0,0,0,0,0, 1,0,0,0,1,0,1,1, 0,0,0,0,0,0,0,0, 1,0,1,1,1,0,1,1, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 1,0,0,0,1,0,1,1, 1,0,0,0,0,0,0,0, 1,0,1,1,1,0,1,1, 0,0,1,1,0,0,1,1, 0,0,0,1,0,0,1,1, 0,0,0,0,0,0,0,0, 0,0,0,1,0,0,1,1, 1,1,0,1,0,0,0,1, 0,0,0,0,0,0,0,0, 1,1,0,1,0,0,0,1, 1,1,0,0,1,0,0,0, 0,1,1,1,0,0,1,1, 0,0,0,1,0,0,1,1, 0,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,1, 1,1,1,1,0,0,1,1, 1,1,0,0,1,1,0,0, 1,1,1,1,0,0,1,1, 1,1,0,0,1,1,0,0 };//索引表 unsigned char p0, p1, p2, p3, p4, p5, p6, p7; unsigned char *pmid, *pmidtemp; unsigned char sum; int changed; bool bStart = true; lLength = lWidth * lHeight; unsigned char *pTemp = (unsigned char *)malloc(sizeof(unsigned char) * lWidth * lHeight); // P0 P1 P2 // P7 P3 // P6 P5 P4 while(bStart) { bStart = false; changed = 0; //首先求边缘点(并行) pmid = (unsigned char *)lpDIBBits + lWidth + 1; memset(pTemp, (BYTE) 0, lLength); pmidtemp = (unsigned char *)pTemp + lWidth + 1; for(i = 1; i < lHeight -1; i++) { for(j = 1; j < lWidth - 1; j++) { if( *pmid == 0) { pmid++; pmidtemp++; continue; } p3 = *(pmid + 1); p2 = *(pmid + 1 - lWidth); p1 = *(pmid - lWidth); p0 = *(pmid - lWidth -1); p7 = *(pmid - 1); p6 = *(pmid + lWidth - 1); p5 = *(pmid + lWidth); p4 = *(pmid + lWidth + 1); sum = p0 & p1 & p2 & p3 & p4 & p5 & p6 & p7; if(sum == 0) { *pmidtemp = 1; } pmid++; pmidtemp++; } pmid++; pmid++; pmidtemp++; pmidtemp++; } //现在开始串行删除 pmid = (unsigned char *)lpDIBBits + lWidth + 1; pmidtemp = (unsigned char *)pTemp + lWidth + 1; for(i = 1; i < lHeight -1; i++) { for(j = 1; j < lWidth - 1; j++) { if( *pmidtemp == 0) { pmid++; pmidtemp++; continue; } p3 = *(pmid + 1); p2 = *(pmid + 1 - lWidth); p1 = *(pmid - lWidth); p0 = *(pmid - lWidth -1); p7 = *(pmid - 1); p6 = *(pmid + lWidth - 1); p5 = *(pmid + lWidth); p4 = *(pmid + lWidth + 1); p1 *= 2; p2 *= 4; p3 *= 8; p4 *= 16; p5 *= 32; p6 *= 64; p7 *= 128; sum = p0 | p1 | p2 | p3 | p4 | p5 | p6 | p7; if(deletemark[sum] == 1) { *pmid = 0; bStart = true; } pmid++; pmidtemp++; } pmid++; pmid++; pmidtemp++; pmidtemp++; } } return true; }
application/pdf
发布资源于 13 年前