Removing white background from Barcode image(s)

8 次查看(过去 30 天)
Hello,
I'm currently trying to process a large number of barcodes.
I'm using a function available on the forums called generateBarcodeCode39().
it outputs the generated barcode image(s) and saves each respective figure to jpg in a directory.
My Problem:
The size of my barcodes are different. Some times I will have a string of text that is 4-5 characters long, others more.
this results in different image sizes of barcodes that are saved.
i'm trying to have one size inputted into a formatted excel document, which is why the size of the barcodes are important.
Question:
How would I go about removing just the white background that is generated when creating a matlab figure for each image? I've tried imcrop, and it does work for some cases, but it's not a one size fits all solution.
should i just create different inputs to the imcrop() function that specifies each barcode case and crop it accordingly?
  3 个评论
adam campbell
adam campbell 2020-11-19
编辑:adam campbell 2020-11-19
yes. let me attach. I'm actually calling the function in a loop, displaying in a figure, and then saving it off in a jpg.
A section of my code, that takes in a cell array of numbers i want turned into barcodes, creates figure, and saves as image:
for i = 1:length(CellData)
% Generate a logical array containing the barcode
barcodeArray = generateBarcodeCode39(num2str(CellData{i,3}), barWidth, barHeight, appendTerminationMarkers);
% Generate an image of the barcode
figure(i)
fh = imshow(~barcodeArray); % Have to NOT the array, other wise MATLAB displays 1 as black and 0 as white
%not neccessary
if strcmp(class(CellData{i,3}),'char') == 1
saveas(figure(i),[pwd strcat('/Barcodes/',(CellData{i,3})) '.jpg']) ;
else
saveas(figure(i),[pwd strcat('/Barcodes/',num2str(CellData{i,3})) '.jpg']) ;
end
end
adam campbell
adam campbell 2020-11-19
this section of code is something i came up with to crop the images, and then save over the existing from the directory. however since they seem to be different size from the function, my current "cropar" variable that acts as RECT in the imcrop() help doesn't work for all cases. see below:
cropar = [130 50 525 190] ;
for i = 1:length(bcdir)
I = imread(bcdir{i,1});
I2 = imcrop(I,cropar);
figure(i)
imshow(I2)
if strcmp(class(bcdir{i,1}),'char') == 1
saveas(figure(i),[pwd strcat('/Barcodes/',(bcdir{i,1})) ]) ;
else
saveas(figure(i),[pwd strcat('/Barcodes/',num2str(bcdir{i,1})) ]) ;
end
end

请先登录,再进行评论。

采纳的回答

Rik
Rik 2020-11-20
The easiest solution is to not add the border in the first place:
barWidth = 3;barHeight = 100;appendTerminationMarkers = false;i=1;CellData{i,3}=123456;
barcodeArray = generateBarcodeCode39('123456', barWidth, barHeight, appendTerminationMarkers);
if isa(CellData{i,3},'char')
imwrite(barcodeArray,fullfile(pwd,'Barcodes',[ CellData{i,3} '.jpg']));
else
imwrite(barcodeArray,fullfile(pwd,'Barcodes',[num2str(CellData{i,3}) '.jpg']));
end
  2 个评论
adam campbell
adam campbell 2020-11-20
Hello, could you please see my new post? I have a similar question that you may be able to help with.
it would be really appreciated.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Environment and Settings 的更多信息

产品


版本

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by