Hi,
How can I crop an image by having the top left coordinate (X1,Y1) and bottom right (X2,Y2).
I2 = imcrop(im,[x1 y1 x2 y2])
does not seem to work?
Thanks

3 commentaires

John BG
John BG le 4 Mar 2017
Hi Hu
this is John BG ( <mailto:jgb2012@sky.com jgb2012@sky.com> ) please check my answer, image cropping without imcrop.
If you find it useful would you please mark my answer as accepted answer?
thanks in advance
John BG
nisa sarfraz
nisa sarfraz le 14 Jan 2020
I=imread(images(1).name); %crop one to get rect
this line of code give error of index matrix dimension exeeds. kindly suggest some solution
Nisa, start a new question, and give the code that you used to load up your images structure (was it the dir function?). Your images structure is evidently empty, meaning it found not images.
filePattern = fullfile(pwd, '*.png');
images = dir(filePattern);
if isempty(images)
message = sprintf('No PNG images found in folder %s\n', pwd)
uiwait(errordlg(message))
return;
end
thisImage=imread(images(1).name);
imshow(thisImage)
% Crop one to get rect
croppedImage = imcrop(thisImage);

Connectez-vous pour commenter.

 Réponse acceptée

Image Analyst
Image Analyst le 2 Oct 2014

3 votes

You used 151 instead of 115 in your width. Here, try this:
grayImage = imread('circuit.tif');
subplot(1,2,1);
imshow(grayImage);
h = impixelinfo();
axis on;
I2 = imcrop(grayImage,[115, 89, 161-115,142-89]);
subplot(1,2,2);
imshow(I2)
axis on;

2 commentaires

Aparna Sivakumar
Aparna Sivakumar le 16 Mai 2022
Hi how could you get the follwing values>? imcrop(grayImage,[115, 89, 161-115,142-89]);
Image Analyst
Image Analyst le 16 Mai 2022
I don't know. It looks like the original poster changed/edited his post. It no longer mentions 151 and he removed the image.

Connectez-vous pour commenter.

Plus de réponses (3)

John BG
John BG le 4 Mar 2017
Modifié(e) : John BG le 4 Mar 2017

10 votes

Hi Hu
A=imread('im1.jpg');imshow(A)
p=ginput(2)
p1max=max(p(:,1));p2max=max(p(:,2));p1min=min(p(:,1));p2min=min(p(:,2));
A(:,[1:p1min],:)=[];
A([1:p2min],:,:)=[];
A(:,[uint64(p1max-p1min+1):end],:)=[];
A([uint64(p2max-p2min+1):end],:,:)=[];
imshow(A)
EXPLANATION
1.
as example let's start with this image
A=imread('im1.jpg');imshow(A)
2. Selecting 2 diagonal points that define the borders you want to remove. I use command ginput but you already have the values
p=ginput(2)
3. Calculating border values from ginput points
p1max=max(p(:,1));p2max=max(p(:,2));p1min=min(p(:,1));p2min=min(p(:,2));
4. Removing on borders, one side of the frame at a time
A(:,[1:p1min],:)=[];
A([1:p2min],:,:)=[];
A(:,[uint64(p1max-p1min+1):end],:)=[];
A([uint64(p2max-p2min+1):end],:,:)=[];
5.
Check
imshow(A)
Hu
if you find these lines useful would you please mark my answer as Accepted Answer?
To any other reader, if you find this answer of any help please click on the thumbs-up vote link,
thanks in advance for time and attention
John BG
Nalini Vishnoi
Nalini Vishnoi le 2 Oct 2014

4 votes

You can try using the following command
I2 = imcrop(im,[x1 y1 x2-x1 y2-y1]);
imcrop uses the following syntax:
I2 = imcrop(I,RECT);
where RECT is a 4-element vector with the form [XMIN YMIN WIDTH HEIGHT];

3 commentaires

hu
hu le 2 Oct 2014
The I2 = imcrop(im,[x1 y1 x2-x1 y2-y1]) does not work.
How can I "convert" my coordinates to be represented in the RECT?
Geoff Hayes
Geoff Hayes le 2 Oct 2014
hu - please describe what you mean by ...does not work. Perhaps provide an example pair of coordinates with what you expect to be the desired outcome.
hu
hu le 2 Oct 2014
Modifié(e) : hu le 2 Oct 2014
Hi,
If I wish to crop the image (get the square in the middle) and based on the code sugested, It does not work:
I=imread('circuit.tif');
I2 = imcrop(I,[115, 89, 161-151,142-89]);
imshow(I2)
The coordiantes are (115,89,161,142) (Xtop left,Ytop left, Xbottom right, Ybottom right).
Thanks

Connectez-vous pour commenter.

Amruta Talreja
Amruta Talreja le 4 Mar 2017

0 votes

I2 = imcrop(B1,[12659 11677 11281 12661]); imshow(I2); I wrote this code and i am getting a blank screen. plz help.

4 commentaires

Walter Roberson
Walter Roberson le 4 Mar 2017
What is size(B1)?
Image Analyst
Image Analyst le 4 Mar 2017
Modifié(e) : Image Analyst le 4 Mar 2017
Try this:
I2 = imcrop(B1,[12659 11677 11281 12661]);
whos I2;
whos B1;
fprintf('Max=%f, min=%f\n', max(I2(:)), min(I2(:)));
imshow(I2, []);
Warid Islam
Warid Islam le 12 Juil 2019
Hi,
Is it possible to crop the image manually without using a rectangle? For example, can I create a boundary manually with a mouse on the Matlab image and display the cropped image separately?
Image Analyst
Image Analyst le 13 Juil 2019
If you use imcrop() without any arguments, you'll be in interactive drawing mode.

Connectez-vous pour commenter.

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by