相关疑难解决方法(0)

剪出文字形状的图像

我需要在另一个图像中剪切出文本形状的图像.我认为它最好显示在图像中.

这是一张猫的照片:

一只好的猫的照片

这是我要删除的文字:

文本切出猫照片

生成的图像是这样的:

导致猫照片的剪切

文本图像将始终为黑色并具有透明背景,并且生成的剪切图案也应具有透明背景.两个输入图像也将具有相同的大小.

java image image-processing

43
推荐指数
4
解决办法
1万
查看次数

平滑锯齿状路径

前几天我正在参与线程图像/图形到一个形状,并通过Rectangle迭代添加到图像来做一个黑客尝试获取图像的轮廓Area.那很慢.

这个例子改为构建一个GeneralPathArea从GP 创建.快多了.

用于处理的样本图像

左上角的图像是"源图像".右边的两个是处理轮廓的各个阶段.它们都有圆形边缘和三角形倾斜边缘的锯齿状边缘.

我希望获得一种能够消除或减少锯齿状的形状.

在ASCII艺术中.

情况1:

  1234
1 **
2 **
3 ***
4 ***
5 ****
6 ****
Run Code Online (Sandbox Code Playgroud)

角落在:

  • (2,3)内角
  • (3,3)
  • (3,5)内角
  • (4,5)

案例2:

  1234
1 ****
2 ****
3 **
4 **
5 ****
6 ****
Run Code Online (Sandbox Code Playgroud)

角落在:

  • (4,2)
  • (2,2)内角
  • (2,5)内角
  • (4,5)

假设我们的路径具有显示的形状和列出的点,我想放下第一组的"内角"点,同时保留"内部角落的一对"(图像中的一对)第2位.


  • 任何人都可以建议一些聪明的内置方法来完成这项工作的繁重工作吗?
  • 如果不这样做,那么识别内角的位置和性质(对/单)的好方法是什么?(我猜我可以得到一个PathIterator并建立一个新的GeneralPath掉落奇异的内角 - 如果我能想出如何识别它们!).

以下是要使用的代码:

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.geom.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;

/* Gain …
Run Code Online (Sandbox Code Playgroud)

java image image-processing java-2d edge-detection

13
推荐指数
1
解决办法
5823
查看次数

是否有适当的算法来检测图形的背景颜色?

对于大学,我们已经给出了一个任务,在给定图像的情况下,我们必须识别"数字",它们的颜色以及它们内部的"像素组"的数量.让我解释:

在此输入图像描述

上面的图像有一个图形(在图像中可以有多个图形,但让我们暂时忘记它).

  • 画布的背景颜色是0,0处的像素(在本例中为黄色)
  • 图形的边框颜色为黑色(可以是除画布背景颜色以外的任何颜色).
  • 图的背景颜色为白色(也可以与画布的背景颜色相同).
  • 图形只能有一种背景颜色.
  • 图中有两个像素组.一个是蓝色像素池,另一个是红色池,里面有一些绿色.如您所见,像素组像素的颜色无关紧要(它与图形的背景颜色不同).重要的是他们有联系(甚至是对角线).因此,尽管有两种不同的颜色,但无论如何这种群体只被认为是一种.
  • 如您所见,边界可以像您希望的那样不规则.然而,它只有一种颜色.
  • 众所周知,像素组不会触及边界.
  • 有人告诉我,除了图的背景颜色外,像素组的颜色可以是任何颜色.我假设它可以与图的边框颜色(黑色)相同.

我们已经给出了一个能够拍摄图像并将它们转换为矩阵的类(每个元素是表示像素颜色的整数).

就是这样.我是用Java做的.

我做了什么

  • 遍历矩阵中的每个像素
  • 如果我发现一个与背景颜色不同的像素,我会认为它属于图的边界.initialPixel从现在开始我会调用这个像素.
  • 请注意,initialPixel我提供的图像中的黑色像素位于图的左上角.我有目的地在那里做了一个尖锐的切口来说明它.
  • 我现在的任务是找到图形的背景颜色(在这种情况下是白色).

但是我找到这样的背景颜色(白色)会遇到很多麻烦.这是我做的最接近的方法,适用于某些情况 - 但不适用于此图像:

  • 因为我知道边框的颜色,我能找到的第一个不同的颜色,是对南方initialPixel.听起来好像是个好主意 - 它确实有效,但它不适用于所提供的图像:在这种情况下它将返回黄色,因为initialPixel它远离图形的内容.

假设我确实找到了图形的背景颜色(白色),我的下一个任务就是要意识到图中存在两个像素组.这个似乎更容易:

  • 由于我现在知道图形的背景颜色(白色),我可以尝试遍历图中的每个像素,如果我发现一个不属于边框并且不是图形背景的一部分,我已经可以告诉它有一个像素组.我可以开始递归函数来找到与这样的组相关的所有像素并"标记"它们,以便在将来的迭代中我可以完全忽略这些像素.

我需要的

是的,我的问题是关于如何找到图形的背景颜色(请记住它可以与整个图像的背景颜色相同 - 现在它是黄色的,但它也可以是白色的)基于我之前描述的内容.

我不需要任何代码 - 我只是在为这样的代码思考一个合适的算法.边界可能有如此奇怪的不规则线条的事实正在扼杀我.

或者甚至更好:我一直都做错了吗?也许我根本不应该如此关注这一点initialPixel.也许一种不同的初始方法会起作用?有关于此类主题的文档/示例吗?我意识到有很多关于"计算机视觉"等的研究,但我对这个特殊问题找不到多少.

一些代码

我的函数检索带有所有数字的向量:*注意:Figure只是一个包含一些值的类,如背景颜色和元素数量.

public Figure[] getFiguresFromImage(Image image) {
    Figure[] tempFigures = new Figure[100];
    int numberOfFigures = 0;
    matrixOfImage = image.getMatrix();
    int imageBackgroundColor = matrixOfImage[0][0];
    int pixel = 0;

    for (int y = …
Run Code Online (Sandbox Code Playgroud)

java image

8
推荐指数
1
解决办法
4807
查看次数

JFrame的形状与在后台运行的图像/程序相同

我的问题很简单,解决方案肯定不是.我正在寻找一种方法来塑造一个JFrame,就像它将要显示的图像一样.通过形状我的意思是具有alpha!= 0的像素的形状.我已经找到了一个使用GeneralPath对象的工作示例,但它为约500*400的Image创建了~110000个"节点",因此启动JFrame耗时超过2分钟,这绝对不是理想的效果,启动应该在2秒以内.

谢谢你的时间.

java swing image shape jframe

3
推荐指数
1
解决办法
1880
查看次数

标签 统计

image ×4

java ×4

image-processing ×2

edge-detection ×1

java-2d ×1

jframe ×1

shape ×1

swing ×1