1. Introduction 1 Basic principle of image binarization Image binarization processing is to say that the gray level of the point on the image is 0 or 255, that is, the whole image presents an obvious black and white effect. In other words, the binarization images of 256 brightness levels can still reflect the overall and local features of the image by selecting appropriate thresholds. In digital image processing, binary image occupies very important position, especially in practical image processing, to binary image processing and system is composed of many, must carry on the binary image processing and analysis, gray image binarization in the first place, get the binary image, the image again like this is helpful to do further processing, The set nature of the image is only related to the position of the point with the pixel value of 0 or 255. Multi-level value of the pixel is no longer involved, which makes the processing simple and the amount of data processing and compression small. In order to obtain ideal binary images, closed and connected boundaries are generally used to define non-overlapping regions. All pixels with a gray value greater than or equal to the threshold are deemed to belong to a particular object, with a gray value of 255; otherwise, they are excluded from the object area, with a gray value of 0, indicating the background or exceptional object area. If a particular object has uniform and consistent gray values inside, and it is in a uniform background with other levels of gray values, the threshold method can be used to obtain a comparative segmentation effect. If the difference between the object and the background is not shown on the gray value (such as texture difference), the difference feature can be converted to the gray difference, and then the threshold selection technology is used to segment the image. The dynamic control threshold realizes the binarization of image and the specific result of image segmentation can be observed dynamically.

Binarization is a method of image segmentation. In the process of binarization, the pixel gray value greater than a certain critical gray value is set as the gray maximum, and the pixel gray value less than this value is set as the gray minimum, so as to achieve binarization. According to different threshold selection, binarization algorithms can be divided into fixed threshold and adaptive threshold. The commonly used binarization methods are: bimodal method, P-parameter method, iterative method and OTSU method.

function varargout = untitled(varargin)
% UNTITLED M-file for untitled.fig
%      UNTITLED, by itself, creates a new UNTITLED or raises the existing
%      singleton*.
%
%      H = UNTITLED returns the handle to a new UNTITLED or the handle to
%      the existing singleton*.
%
%      UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in UNTITLED.M with the given input arguments.
%
%      UNTITLED('Property','Value',...) creates a new UNTITLED or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before untitled_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to untitled_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help untitled

% Last Modified by GUIDE v2.5 03-Nov-2011 13:59:22

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @untitled_OpeningFcn, ...
                   'gui_OutputFcn',  @untitled_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before untitled is made visible.
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to untitled (see VARARGIN)

% Choose default command line output for untitled
handles.output = hObject;
image1=imread('1.bmp');
axes(handles.axes1);
imshow(image1);

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes untitled wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = untitled_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% --- Executes on mouse press over axes background.

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global im;
%提取条形码区域构成的矩形的左上角坐标
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
image=im;
l1=rgb2gray(image);
level=graythresh(l1);
l2=im2bw(l1,level);
l3=~l2;
l4=bwareaopen(l3,50);
l5=~l4;
l6=edge(l1,'canny');
l7=imclose(l6,strel('rectangle',[2,19]));
l8=imopen(l7,strel('rectangle',[2,19]));
l9=imopen(l8,strel('rectangle',[2,19]));
[L,num]=bwlabel(l9,8);
STATS=regionprops(L,'all');
a=length(STATS);
%figure,imshow(L);
%hold on;
b=0;
for i=1:a
    temp=STATS(i).BoundingBox;
    s=temp(3)*temp(4);
    if s>b
        b=s;
        k=i;%记录面积最大的标记区域的索引值
    end
end
%rectangle('position',STATS(k).BoundingBox,'edgecolor','r');%绘制最大标记区域的外接矩形
temp=STATS(k).BoundingBox;
Rx=round(temp(1));Ry=round(temp(2));%提取条形码区域左上角的坐标
Rwidth=round(temp(3));Rlength=round(temp(4));


%初始化
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
check_left = [13,25,19,61,35,49,47,59,55,11;...	%左边数据编码,奇
              39,51,27,33,29,57, 5,17, 9,23];	%左边数据编码,偶
check_right = [114,102,108,66,92,78,80,68,72,116];	%右边数据编码
first_num = [31,20,18,17,12,6,3,10,9,5];    %第一位数据编码
bar = im;  %读输入条形码图片
bar_Gray = rgb2gray(bar);   %将RGB图片转换灰度图

[a_hist x] = imhist(bar_Gray);   %绘制灰度直方图,返回直方图数据向量a_hist,和相应的色彩值向量x


    check_code = 10 - check_code;
end

if check_code==str2num(num_bar(13)) %判断校验码是否正确
    code = num_bar
else
  %  fprintf(1,'Please Turn It Around!\n');
  str='Please Turn It Around!';
    set(handles.text4,'string',str);
    return
end
%c=num2str(code);
set(handles.text1,'string',code);
set(handles.text4,'string','');
guidata(hObject,handles);


% --- Executes during object creation, after setting all properties.

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
set(handles.text1,'string','');
[filename,pathname]=...
    uigetfile({'*.jpg';'*.tif';'*.bmp';'*.gif';'*.*'},'选择图片');
if pathname == 0
    return;
end
str=[pathname filename];
global im;
im=imread(str);
axes(handles.axes1);
imshow(im);


% --- Executes during object creation, after setting all properties.
function axes1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to axes1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate axes1
Copy the code

Complete code or simulation consulting to add QQ1575304183