如何从 SWT 图像中获取感兴趣区域?
How to get a region of interest from a SWT Image?
我想从 SWT 图像对象中获取感兴趣区域 (ROI)。
我找不到适合我的方法。有没有可能避免自己写一个?
我需要类似的东西(类似于 opencv 实现):
Image img = new Image(display, path);
Rectangle roi = new Rectangle(0, 0, 10, 10);
Image imgRoi = img.getROI(roi);
我不知道从某个区域创建图像的基本 SWT 方法,但我在此处找到了一个片段可以做到这一点 https://gist.github.com/azhawkes/4347761(致谢作者 Andy Hawkes)。
这里我稍微修改了输入原图的方法。我还实施了 建议的优化(最小化了对 Image.getImageData
的调用)。
public static Image loadImageFromRegion(Image original, Rectangle region) {
ImageData originalImageData = original.getImageData();
ImageData data = new ImageData(region.width, region.height, originalImageData.depth, originalImageData.palette);
int[] pixels = new int[region.width];
byte[] alphas = new byte[region.width];
for (int y = 0; y < region.height; y++) {
originalImageData.getAlphas(region.x, region.y + y, region.width, alphas, 0);
originalImageData.getPixels(region.x, region.y + y, region.width, pixels, 0);
data.setPixels(0, y, region.width, pixels, 0);
data.setAlphas(0, y, region.width, alphas, 0);
}
return new Image(Display.getCurrent(), data);
}
我想从 SWT 图像对象中获取感兴趣区域 (ROI)。
我找不到适合我的方法。有没有可能避免自己写一个?
我需要类似的东西(类似于 opencv 实现):
Image img = new Image(display, path);
Rectangle roi = new Rectangle(0, 0, 10, 10);
Image imgRoi = img.getROI(roi);
我不知道从某个区域创建图像的基本 SWT 方法,但我在此处找到了一个片段可以做到这一点 https://gist.github.com/azhawkes/4347761(致谢作者 Andy Hawkes)。
这里我稍微修改了输入原图的方法。我还实施了 Image.getImageData
的调用)。
public static Image loadImageFromRegion(Image original, Rectangle region) {
ImageData originalImageData = original.getImageData();
ImageData data = new ImageData(region.width, region.height, originalImageData.depth, originalImageData.palette);
int[] pixels = new int[region.width];
byte[] alphas = new byte[region.width];
for (int y = 0; y < region.height; y++) {
originalImageData.getAlphas(region.x, region.y + y, region.width, alphas, 0);
originalImageData.getPixels(region.x, region.y + y, region.width, pixels, 0);
data.setPixels(0, y, region.width, pixels, 0);
data.setAlphas(0, y, region.width, alphas, 0);
}
return new Image(Display.getCurrent(), data);
}