Multiple Labels in an Image
5 次查看(过去 30 天)
显示 更早的评论
Hello, I am currently doing a project and inventory categorization and I can detect each type of inventory, but I can only output each detected image labeled on separate images. I want to know how to label all the detected images on one image. I am currently using insertObjectAnnotation to label my detected items. Can someone please shed some light on how I can put all the labeled products on one image. Thank you.
采纳的回答
sixwwwwww
2013-12-3
you can store labels for all of your items in a cell array of strings and then you can use this cell array of strings in place of single label. For more information see:
I hope it helps. Good luck!
20 个评论
Cady
2013-12-3
Thanks for your quick response. Can you explain in more detail how this would be done with something like this:
detectedImg = insertObjectAnnotation(img, 'rectangle', bbox, 'Orbit');
detectedImg1 = insertObjectAnnotation(img, 'rectangle', bbox1, 'Monster');
detectedImg2 = insertObjectAnnotation(img, 'rectangle', bbox2, 'GobStoppers');
detectedImg3 = insertObjectAnnotation(img, 'rectangle', bbox3, 'Jolly Ranchers');
detectedImg4 = insertObjectAnnotation(img, 'rectangle', bbox4, 'M&Ms');
sixwwwwww
2013-12-3
I assume that bbox, bbox1 ... are 1x4 vectors since they are referring to rectangle. In this case you can do like this:
BoxPositions = [bbox; bbox1; bbox2; bbox3; bbox4];
BoxLabels = {'Orbit', 'Monster', 'GobStoppers', 'Jolly Ranchers', 'M&Ms'};
detectedImg = insertObjectAnnotation(img, 'rectangle', BoxPositions, BoxLabels);
Good luck!
Cady
2013-12-3
Thank you very much for your help. Receiving this error for some reason though:
Error using insertObjectAnnotation>crossCheckInputs (line 254)
The length of LABEL must be equal to the number of rows in POSITION.
Cady
2013-12-3
Example for bbox:
detector = vision.CascadeObjectDetector('OrbitNew.xml');
img = imread(image);
bbox = step(detector, img);
sixwwwwww
2013-12-3
what value you get for bbox in the workspace? is it 1x4 vector of double values?
sixwwwwww
2013-12-3
in this case you have to do as follows:
count = 0;
count = count + size(bbox, 1);
BoxLabels(1:count) = {'Orbit'};
prevCount = count;
count = count + size(bbox1, 1);
BoxLabels(prevCount:count) = {'Monster'};
prevCount = count;
count = count + size(bbox2, 1);
BoxLabels(prevCount:count) = {'GobStoppers'};
prevCount = count;
count = count + size(bbox3, 1);
BoxLabels(prevCount:count) = {'Jolly Ranchers'};
prevCount = count;
count = count + size(bbox4, 1);
BoxLabels(prevCount:count) = {'M&Ms'};
BoxPositions = [bbox; bbox1; bbox2; bbox3; bbox4];
detectedImg = insertObjectAnnotation(img, 'rectangle', BoxPositions, BoxLabels);
Cady
2013-12-3
works great thank you very for your time, but now its incorrectly labeling some products. For example, it will detect 3 m&ms in the photo but the 4th m&m will be detected as jolly ranchers, etc.
sixwwwwww
2013-12-3
Basically it all depends upon your bbox, bbox1 stuff. If you share your complete code then maybe I can look at it a bit
Cady
2013-12-3
编辑:Cady
2013-12-4
clc;clear
imnumber = {'Newsstand56.jpg', 'Newsstand30.jpg', 'Newsstand48.jpg'};
for i=1:length(imnumber)
image=imnumber{i};
%Orbit
detector = vision.CascadeObjectDetector('OrbitNew.xml');
img = imread(image);
bbox = step(detector, img);
detectedImg = insertObjectAnnotation(img, 'rectangle', bbox, 'Orbit');
numBox = size(bbox, 1);
Orb = 8 - numBox;
%figure; imshow(detectedImg);
%Monster
detector = vision.CascadeObjectDetector('Monster.xml');
img = imread(image);
bbox1 = step(detector, img);
detectedImg1 = insertObjectAnnotation(img, 'rectangle', bbox1, 'Monster');
numBox1 = size(bbox1, 1);
Mon = 6-numBox1;
%figure; imshow(detectedImg1);
%GobStoppers
detector = vision.CascadeObjectDetector('GobStopp.xml');
img = imread(image);
bbox2 = step(detector, img);
detectedImg2 = insertObjectAnnotation(img, 'rectangle', bbox2, 'GobStoppers');
numBox2 = size(bbox2, 1);
Gob = 6-numBox2;
%figure; imshow(detectedImg2);
%Jolly Ranchers
detector = vision.CascadeObjectDetector('Jolly.xml');
img = imread(image);
bbox3 = step(detector, img);
detectedImg3 = insertObjectAnnotation(img, 'rectangle', bbox3, 'Jolly Ranchers');
numBox3 = size(bbox3, 1);
Jolly = 6 - numBox3;
%figure; imshow(detectedImg3);
%M&Ms
detector = vision.CascadeObjectDetector('M&Ms.xml');
img = imread(image);
bbox4 = step(detector, img);
detectedImg4 = insertObjectAnnotation(img, 'rectangle', bbox4, 'M&Ms');
numBox4 = size(bbox4, 1);
MM = 6 - numBox4;
%figure; imshow(detectedImg4);
OrderLog(i,2)=Orb;
OrderLog(i,3)=Gob;
OrderLog(i,4)=Mon;
OrderLog(i,5)=Jolly;
OrderLog(i,6)=MM;
OrderLog(i,1)=i;
end
OrderLog
Cady
2013-12-3
When I detect them separately in the image, it works fine. But when using what you supplied, it detects incorrectly
sixwwwwww
2013-12-4
can you send me files as well? Also try this code and I am suggesting same thing in your case:
faceDetector = vision.CascadeObjectDetector;
I = imread('visionteam.jpg');
bboxes = step(faceDetector, I);
IFaces = insertObjectAnnotation(I, 'rectangle', bboxes, 'Face');
figure, imshow(IFaces), title('Detected faces');
bodyDetector = vision.CascadeObjectDetector('UpperBody');
bodyDetector.MinSize = [60 60];
bodyDetector.ScaleFactor = 1.05;
bboxBody = step(bodyDetector, I);
IBody = insertObjectAnnotation(I, 'rectangle',bboxBody,'Upper Body');
figure, imshow(IBody), title('Detected upper bodies');
BoxPositions = [bboxes; bboxBody];
BoxLabels(1:6) = {'Face'};
BoxLabels(7:18) = {'Upper Body'};
a = insertObjectAnnotation(I, 'rectangle', BoxPositions,BoxLabels);
figure, imshow(a)
you can directly run this code and thats the ans you should also according to the suggested manner
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Computer Vision with Simulink 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!发生错误
由于页面发生更改,无法完成操作。请重新加载页面以查看其更新后的状态。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
亚太
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)
