我是 matlab 的新手。我正在撰写关于手写文本文档分割的论文。在此我需要在灰色二进制图像中绘制彩色矩形并显示它。我使用了 ShapeInserter 。这是我的代码。
file_name = 'test4.jpg';
image = imread(strcat('E:\ARIF\Studying Related\L-4 T-1\CSE-400(Project and Thesis)\Matlab Program\images\',file_name));
figure('name','Main Image'),imshow(image);
gray_image=rgb2gray(image);
level = graythresh(gray_image);
%display(level);
binary_image = im2bw(image,level);
shapeInserter = vision.ShapeInserter('Shape','Rectangles','BorderColor','Custom', 'CustomBorderColor', uint8([255 0 0]));
rect = int16([10, 10, 100, 100]);
rgb = repmat(binary_image, [1, 1, 3]);
img1 = step(shapeInserter, rgb, rect);
figure('name','Edited Image'),imshow(img1);
但是我收到了这个错误。
使用images.internal.imageDisplayValidateParams> validateCData(第119行)时出错>如果输入是逻辑(二进制),则必须是二维的。
images.internal.imageDisplayValidateParams(第27行)出错 common_args.CData = validateCData(common_args.CData,image_type);
images.internal.imageDisplayParseInputs中的错误(第78行) common_args = images.internal.imageDisplayValidateParams(common_args);
imshow中的错误(第227行)
[common_args,specific_args] = ...draw_rectangle_inside_image错误(第13行)
figure('name','Edited Image'),imshow(img1);
如果我改变这一行“ rgb = repmat(binary_image,[1,1,3]); ”to this“ rgb = ind2rgb(binary_image,[1,1,3] ]); “我得到一个红色的矩形,但不是我想要放置红色矩形的图像。我已经尝试解决这个问题将近4天而且失败了。请尽快帮助我用适当的测试解决方案来解决这个问题。
答案 0 :(得分:1)
专门查看错误的第一部分:
Error using images.internal.imageDisplayValidateParams>validateCData(line 119) >If input is logical (binary), it must be two-dimensional.
shapeInserter
期望输入是2D 二进制图像。但是,由于您的repmat
电话,您的图片是3D二进制图片。如果图片为3D(多渠道),则必须属于uint8/uint16/uint32
,而不是logical
/二进制。
实际上,您无需复制通道以使用shapeInserter
将图形绘制到图像上。您只需使用二进制图像即可。但是,因为我不知道你最终将使用它的应用程序,我将假设你需要二进制图像的RGB表示。
因此,在您将图片转换为二进制文件后,将其转换回uint8
。
只需使用im2uint8
将图片类型更改回uint8
:
%// YOUR CODE
file_name = 'test4.jpg';
image = imread(strcat('E:\ARIF\Studying Related\L-4 T-1\CSE-400(Project and Thesis)\Matlab Program\images\',file_name));
figure('name','Main Image'),imshow(image);
gray_image=rgb2gray(image);
level = graythresh(gray_image);
%display(level);
binary_image = im2bw(image,level);
%// NEW CODE
binary_image = im2uint8(binary_image);
%// YOUR CODE FROM BEFORE
shapeInserter = vision.ShapeInserter('Shape','Rectangles','BorderColor','Custom', 'CustomBorderColor', uint8([255 0 0]));
rect = int16([10, 10, 100, 100]);
rgb = repmat(binary_image, [1, 1, 3]);
img1 = step(shapeInserter, rgb, rect);
figure('name','Edited Image'),imshow(img1);
在股票图片(cameraman.tif
)上运行代码,只需对代码稍加补充,这就是我得到的: