我想在scilab中的特定感兴趣区域使用鼠标选择裁剪图像,这里我的代码是
I=imread('G:\SCI\FRAME\mixer2.jpg');
I1G = rgb2gray(I);
figure();ShowImage(I1G,'mixer');
IN1G = gca();
rect1 = rubberbox();
ROI1=imcrop(I1G,rect1);disp(ROI1);
但它会出现以下错误:矩形超出图像范围。 我还使用xclick和xgetmouse函数进行使用鼠标选择进行裁剪,它也会出现相同的错误。 请给我纠正代码的建议。
谢谢和问候
答案 0 :(得分:1)
问题产生于图像坐标系(由imcrop
和SIVP toolbox的所有其他函数使用)和“常规”坐标系(由rubberbox
使用)之间的差异,xcick
和所有内置函数)。图像左上角有第一个像素。相反,rubberbox
左下角为零。
要纠正此问题,您必须在应用imcrop()
之前反转y(垂直)轴坐标:
imagefile="d:\Attila\PROJECTS\Scilab\Stackoverflow\mixer_crop.jpg";
I=imread(imagefile);
I1G=rgb2gray(I);
scf(0); clf(0);
ShowImage(I1G,'mixer');
rect1=rubberbox();
imheight=size(I1G,"r"); //image height
rect1(2)=imheight-rect1(2); //reverse y axes coordinates (0 is at top)
ROI1=imcrop(I1G,rect1);
scf(1); clf(1);
ShowImage(ROI1,'ROI1');