How to add a boundary into a image for saving
5 次查看(过去 30 天)
显示 更早的评论
As the title, I have an image A and boundary B = bwboundaries(C) if I wanna show it, I can use imshow (A); hold on; visboundaries(B,'Color',''); if I use save button. the image I save don't have the same resolution as my source image so what should I do now?
0 个评论
采纳的回答
Gopichandh Danala
2017-6-28
The problem may just be with either the way you save or with way you used bwboundaries. I wrote some sample code using bwperim to get boundary image of a region then save it in png format to save lossless
img = imread('peppers.png');
figure, imshow(img);
% getting a segment
h=imfreehand;
position = wait(h);
region=uint8(roipoly(img,position(:,1),position(:,2)));
region=region.*img;
figure,imshow(region); title('Segmented Region');
% use bwperim rather than bwboundaries to get an Image of boundary.
boundImg = uint8(bwperim(rgb2gray(region),4));
boundImg(boundImg ~=0) = max(img(:));
figure, imshow(img + boundImg)
% save image without loosing information..
imwrite(img + boundImg, 'writeImg.png');
% check
read = imread('writeImg.png');
figure, imshow(read)
isequal(read, img + boundImg)
8 个评论
Warid Islam
2019-7-19
Hi Gopichandh,
Is it possible to crop the image specified by the boundary above?
Image Analyst
2019-7-19
Of course. Use find() on region or position, then use max() and min() to find the max and min rows and columns, then use indexing to extract the cropped region.
[rows, columns] = find(region);
row1 = min(rows);
row2 = max(rows);
col1 = min(columns);
col2 = max(columns);
croppedImage = img(row1:row2, col1:col2, :);
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!