change grayscale pixel color by xy coordinates

3 次查看(过去 30 天)
I have a piece of code that returns the x and y coordinates of a rectangle that I draw on a grayscale image.
frameA=read('abc.jpg');
imshow(frameA);
H=imrect;
Position = wait(H);
Position contains [x y h w], where x,y = xy coordinates of top left corner of rectangle, h=rectangle height, w =rectangle width. So I have all the coordinates I need.
How can I use these coordinates to modify the color of the pixels in this rectangle?
If I use frameA(x,y) = 1 for instance, the x,y here corresponds to the indices of the pixels and not their spatial coordinates.

采纳的回答

Image Analyst
Image Analyst 2015-8-4
With frameA() you need to pass in the row and column, in that order, not x and y in that order. So you'd need frameA(y, x) but even then you'd need to convert y and x to integers because you can't have fractional values: frameA(round(y), round(x)).
To set the values in the rectangle to a particular gray scale, you do something like this
[rows, columns, numberOfColorChannels] = size(frameA);
if numberOfColorChannels > 1
% Convert to grayscale if it's color.
frameA = rgb2gray(frameA);
end
col1 = round(Position(1));
col2 = round(col1 + Position(3));
row1 = round(Position(2));
row2 = round(row1 + Position(4));
frameA(row1:row2, col1:col2) = desiredGrayLevel;
  5 个评论
Image Analyst
Image Analyst 2015-8-4
If it's gray scale, you can only display it as red via a colormap. To make it really red, it has to be a 3D RGB image.
To indicate some point with a red mark over an image, you can use plot()
imshow(grayImage);
hold on;
plot(column, row, 'r.', 'Markersize', 30);

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Images 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by