matlab - 使用Matlab的imrect获取新矩形的坐标

标签 matlab image-processing

对于我的项目,我需要很多图片来提取投资返回率。当我的项目开始时,我想要显示一张图片,然后用户选择他/她想要的投资返回率。函数 imrect 似乎就是这样做的。我试图在拖动或调整大小后获取矩形的坐标。问题是返回的值似乎不正确。

我似乎找不到问题所在,相关问题也没有帮助。我尝试使用 imcrop,但无法做得更好...

function [ new_image ] = getRoi(image)

rect = size(image);
rect = round(rect ./2);

figure, imshow(image);

h = imrect(gca, [5 5 rect(2) rect(1)]);

addNewPositionCallback(h,@(p) title(mat2str(p,3)));
fcn = makeConstrainToRectFcn('imrect',get(gca,'XLim'),get(gca,'YLim'));
accepted_pos = wait(h);
setPositionConstraintFcn(h,fcn);
%getPositionConstraintFcn(h);

pos = getPosition(h);

if round(pos(1)) < round(pos(2))
    X1 = round(pos(1))
    X2 = round(pos(2))
else
    X1 = round(pos(2))
    X2 = round(pos(1))
end

if round(pos(3)) < round(pos(4))
    Y1 = round(pos(3))
    Y2 = round(pos(4))
else
    Y1 = round(pos(4))
    Y2 = round(pos(3))
end

new_image = image(Y1:Y2, X1:X2);

%name = strcat('Roi_', datestr(clock, 'yyyymmddTHHMMSS'),'.png');
%prtIm(new_image, name, '-s');
new_image = image;

end

最佳答案

getPosition 返回[xmin, ymin, width, height]。要获取您想要的坐标,请尝试

X1 = round(pos(1));
Y1 = round(pos(2));
X2 = round(X1 + pos(3));
Y2 = round(Y1 + pos(4));

关于matlab - 使用Matlab的imrect获取新矩形的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20080179/

相关文章:

matlab - 延迟连接 Arduino 和 Simulink

matlab - 如何绘制信号流图

java - 调用 MATLAB JA Builder 编译组件时出现内存不足错误

matlab - 如何使用matlab的trimesh和颜色选项?

java - 在java中组合两个图像?

opencv - 在具有已知引用距离的图像上测量距离时的透视补偿

algorithm - 从给定的图像中获取 sub-cv::Mat 使得

python - 更高效地过滤多个列表和嵌套 for 循环

以元组为键的 MATLAB containers.Map

perl - ImageMagick:将一张图像的 4 个边缘并排合成到另一张图像中