Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 形态击中未击中变换_Image Processing_Opencv - Fatal编程技术网

Image processing 形态击中未击中变换

Image processing 形态击中未击中变换,image-processing,opencv,Image Processing,Opencv,我正在使用OpenCV进行图像处理算法,并试图修复字符中不规则的边缘。我读到形态学击中未击中变换是一个很好的解决方案。这有没有开源的实现 或者有没有其他算法可以用来修复不规则的边缘 可以找到一个简单的命中和未命中实现: #包括 //命中或未命中变换函数 void hitmiss(cv::Mat&src,//源映像,8位单通道矩阵 cv::Mat&dst,//目标映像 cv::Mat&kernel)//内核。1=前景,-1=背景,0=不在乎 { CV_断言(src.type()=CV_8U&&sr

我正在使用OpenCV进行图像处理算法,并试图修复字符中不规则的边缘。我读到形态学击中未击中变换是一个很好的解决方案。这有没有开源的实现

或者有没有其他算法可以用来修复不规则的边缘


可以找到一个简单的命中和未命中实现:

#包括
//命中或未命中变换函数
void hitmiss(cv::Mat&src,//源映像,8位单通道矩阵
cv::Mat&dst,//目标映像
cv::Mat&kernel)//内核。1=前景,-1=背景,0=不在乎
{
CV_断言(src.type()=CV_8U&&src.channels()=1);
cv::Mat k1=(内核==1)/255;
cv::Mat k2=(内核==-1)/255;
cv::normalize(src,src,0,1,cv::NORM\u MINMAX);
cv::Mat e1,e2;
cv::侵蚀(src、e1、k1);
侵蚀(1-src,e2,k2);
dst=e1和e2;
}

但我认为只有通过膨胀才能解决这个问题,如中的例子(摘自Gonzales等人的“数字图像处理”一书)

结合形态膨胀和侵蚀,得出以下结果:

源代码:

package characterRestoration;

import marvin.image.MarvinColorModelConverter;
import marvin.image.MarvinImage;
import marvin.io.MarvinImageIO;
import marvin.plugin.MarvinImagePlugin;
import marvin.util.MarvinPluginLoader;

public class CharacterRestoration {

MarvinImage                 image = MarvinImageIO.loadImage("./res/character_in.png");
private MarvinImagePlugin   dilation = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.dilation");
private MarvinImagePlugin   erosion = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.erosion");

private boolean[][]         matrixD = new boolean[][]{
                            {false,false,false,false,false,false,false,false,false},
                            {false,false,false,false,false,false,false,false,false},
                            {false,false,false,false,false,false,false,false,false},
                            {false,false,true,true,true,true,true,true,true},
                            {false,false,true,true,true,true,true,true,true},
                            {false,false,true,true,true,true,true,true,true},
                            {false,false,false,false,false,false,false,false,false},
                            {false,false,false,false,false,false,false,false,false},
                            };

private boolean[][]         matrixE = new boolean[][]{
                            {true,true,true},
                            {true,true,true},
                            {true,true,true}
                            };          

public CharacterRestoration(){
    // Convert image to binary format
    image = MarvinColorModelConverter.rgbToBinary(image, 125);

    // Morphological Dilation
    dilation.setAttribute("matrix", matrixD);
    dilation.process(image.clone(), image);

    // Morphological Erosion
    erosion.setAttribute("matrix", matrixE);
    erosion.process(image.clone(), image);

    MarvinImageIO.saveImage(image, "./res/character_out.png");
}

public static void main(String[] args) {
    new CharacterRestoration();
}

}

你在哪里读过?我认为打不中本身是不够的,你需要用一些从它派生出来的形态学运算。看见
package characterRestoration;

import marvin.image.MarvinColorModelConverter;
import marvin.image.MarvinImage;
import marvin.io.MarvinImageIO;
import marvin.plugin.MarvinImagePlugin;
import marvin.util.MarvinPluginLoader;

public class CharacterRestoration {

MarvinImage                 image = MarvinImageIO.loadImage("./res/character_in.png");
private MarvinImagePlugin   dilation = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.dilation");
private MarvinImagePlugin   erosion = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.morphological.erosion");

private boolean[][]         matrixD = new boolean[][]{
                            {false,false,false,false,false,false,false,false,false},
                            {false,false,false,false,false,false,false,false,false},
                            {false,false,false,false,false,false,false,false,false},
                            {false,false,true,true,true,true,true,true,true},
                            {false,false,true,true,true,true,true,true,true},
                            {false,false,true,true,true,true,true,true,true},
                            {false,false,false,false,false,false,false,false,false},
                            {false,false,false,false,false,false,false,false,false},
                            };

private boolean[][]         matrixE = new boolean[][]{
                            {true,true,true},
                            {true,true,true},
                            {true,true,true}
                            };          

public CharacterRestoration(){
    // Convert image to binary format
    image = MarvinColorModelConverter.rgbToBinary(image, 125);

    // Morphological Dilation
    dilation.setAttribute("matrix", matrixD);
    dilation.process(image.clone(), image);

    // Morphological Erosion
    erosion.setAttribute("matrix", matrixE);
    erosion.process(image.clone(), image);

    MarvinImageIO.saveImage(image, "./res/character_out.png");
}

public static void main(String[] args) {
    new CharacterRestoration();
}