将手写字符转换成数据集

最近开始学习PCANET,看了半个月的代码,目前导师要我把代码中的数据集换成自己手写的字符集。于是开始查找资料,试着去做。现在此分享大家,和大家一起学习。

 导师的要求具体来说就是要我在白纸上写上数据,然后在电脑上处理成数据集,每一列代表一个字符图片。如果你也有这方面的需求,但愿能帮到你。


过程如下:

首先,将手写的字符传到电脑上做处理,分割成单个图片。


做分割的matlab代码如下:


function crop_sub_image()
tic
global cnt I subImg
cnt = 1;


[FileName,PathName] = uigetfile('*.jpg');
I = imread(fullfile(PathName,FileName));
h=rgb2gray(I);
thresh=graythresh(h);
er=im2bw(h,thresh);


% 设置裁剪图像大小
%w = 20;    %240
w = 20;    %240
%h = 40;    %240
h = 40;    %240


 bi=imresize(er,[200,240]);%将图片大小修改成200*240
[height,width,~]=size(bi)
%[height, width,~] = size(I);
 


hFig = figure('Toolbar','none','Menubar','none',...
    'Name','扣样本',...
    'NumberTitle','off');
% tp = get(hFig,'Position');
hIm = imshow(bi); hold on
% set(hFig,'Position',[tp(1),tp(2),width,height]);
hSP = imscrollpanel(hFig,hIm);
api = iptgetapi(hSP);
api.setMagnification(api.findFitMag()) % 图像刚好显示


iptaddcallback(gcf,'WindowButtonMotionFcn',@showSubImage);
k = waitforbuttonpress;
while k ~= 1
    if k==0
        name = sprintf('_%05d.jpg',cnt);
        imwrite(subImg,[FileName(1:end-4),name],'jpg');
        cnt = cnt+1;
    end
    k = waitforbuttonpress
end


close all


warndlg('结 束!')


%-----------------------------------
    function showSubImage(obj,evt)
        if strcmp(get(obj,'SelectionType'),'normal')
            pos = get(obj,'Position');
            ratio = height/pos(4);
            pt = get(obj,'CurrentPoint');
            y = ceil(pos(4)-pt(2));
            x = ceil(pt(1));
            centX = ceil(width/2 + ratio*(x-pos(3)/2));
            centY = ceil(height/2 + ratio*(y-pos(4)/2));
            rect = [centX-w/2,centY-h/2,w-1,h-1];
            if rect(1)<0 || rect(2)<0 || rect(1)+rect(3)>width || rect(2)+rect(4)>height
                return;
            end
            t = toc;
            if t>0.1
                subImg = imcrop(bi,rect);
                figure(2),imshow(subImg);
                tic
            end
        end
    end


end

(这就是我分割出来的一个字符的图片)


将分割出来的图片制作成数据集.mat文件。

代码如下:

files = dir('E:\shouxiezifu1\*.jpg');%读取图片所在地方
 Train=zeros(800,31);    %将举证Train的数据置为0。一列代表着一副图片,因为分割出来的图片时20*40的大小,31代表我自己的图片的数目(这里根据自己的数据进行修改)
% pics = cell(length(files), 1);
for k = 1:length(files)
  I = imread(['E:\shouxiezifu1\', files(k).name]);
  B=I';
  c=B(:);
train(:,k)=c;
end
save train  %保存数据集train


可以打开这个数据集中的图片看看,输入代码:a=train(:,1);b=reshape(a,20,40);imshow(b);

这样就可以在数据集中打开一个字符图片了




希望对你们有用哈得意





  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值