图像的侵蚀处理

原创 2016年05月30日 22:06:18

1.Erode.h Erode.c 是图像侵蚀的头文件、核心函数文件
Erode.h

#ifndef _ERODE_H_
#define _ERODE_H_

#ifdef __cplusplus
extern "C"
{
#endif

    int erodeFunction(float * inData, float * outData, int dataWidth, int dataHeight, int erodeWidth, int erodeHeight, int channels);

#ifdef __cplusplus
}
#endif

#endif

Erode.c

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include "Erode.h"
#include "myMath.h"
int erodeFunction(float * inData, float * outData, int dataWidth, int dataHeight, int erodeWidth, int erodeHeight, int channels){
        int widthTemp, heightTemp;
    int i, j;
    int m, n, z;
    float * dataTemp = NULL;
    int count = 0;
    float medianData = 0.f;
    if(channels > 32){
        printf("channels is larger.\n");
        return -1;
    }
    if(erodeWidth % 2 == 0){
        widthTemp = erodeWidth / 2 - 1;
    }else{
        widthTemp = erodeWidth / 2;
    }
    if(erodeHeight % 2 == 0){
        heightTemp = erodeHeight / 2 - 1;
    }else{
        heightTemp = erodeHeight / 2;
    }

    dataTemp = (float*)malloc(sizeof(float) * erodeWidth * erodeHeight);
    for(z = 0; z < channels; z ++){
        for(i = 0; i < dataHeight; i ++){
            for(j = 0; j < dataWidth; j ++){
                memset(dataTemp, 0, sizeof(float) * erodeWidth * erodeHeight);
                count = 0;
                medianData = 0.0f;
                for(m = -heightTemp; m < erodeHeight - heightTemp; m ++){
                    for(n = -widthTemp; n < erodeWidth - widthTemp; n ++){
                        if(i + m >= 0 && i + m < dataHeight && j + n >= 0 && j + n < dataWidth){
                            dataTemp[count] = inData[((i + m) * dataWidth + (j + n)) * channels + z];
                            count ++;
                        }
                    }
                }

                medianData = getMinValue(dataTemp, count);
                outData[(i * dataWidth + j) * channels + z] = medianData;
            }
        }
    }
    free(dataTemp);
    return 0;
}

2.主程序函数

#include "stdafx.h"
#include "Tools.h"
#include "Erode.h"
#include <opencv2\opencv.hpp>
using namespace cv;
int main()
{
    int imageWidth, imageHeight;
    int channels = 1;
    Mat mImage = imread("D:\\workSpace\\VSWorkSpace\\ImageProcess\\ImageProcess\\erodeImage.jpg", 1);
    imshow("srcImage", mImage);
    float * imageData = NULL;
    float * imageOutData = NULL;
    imageWidth = mImage.cols;
    imageHeight = mImage.rows;
    channels = mImage.channels();
    imageData = (float*)malloc(sizeof(float) * imageWidth * imageHeight * channels);
    imageOutData = (float*)malloc(sizeof(float) * imageWidth * imageHeight * channels);
    uCharDataToFloatData(mImage.data, imageData, imageWidth, imageHeight, channels);
    erodeFunction(imageData, imageOutData, imageWidth, imageHeight, 5, 5, channels);
    floatDataToUCharData(imageOutData, mImage.data, imageWidth, imageHeight, channels, 1);
    imshow("erode Image", mImage);
    waitKey(0);
    free(imageData);
    free(imageOutData);
    return 0;
}

3.getMinValue();
该函数见链接
http://blog.csdn.net/jsf921942722/article/details/51527155
uCharDataToFloatData();
floatDataToUCharData();
两个函数见链接
http://blog.csdn.net/jsf921942722/article/details/51526673
4.效果图
****************************3通道彩色图原图********************
这里写图片描述
****************************3通道彩色图侵蚀后图********************
这里写图片描述
****************************1通道灰度图原图********************
这里写图片描述
****************************1通道灰度图侵蚀后图********************
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

图像的“膨胀”与“腐蚀”

原文请参考 http://blog.csdn.net/poem_qianmo/article/details/23710721 //---------------------------------...
  • yarina
  • yarina
  • 2016年05月09日 16:57
  • 4989

opencv3_java 图像的侵蚀Erode erode

图像的侵蚀Erode erode package opencv_java_demo; import org.opencv.core.*; import org.opencv.imgcodecs....
  • sileixinhua
  • sileixinhua
  • 2017年05月31日 21:26
  • 1067

图像的模糊处理原理

最近微信上的那个给红包让看图片的小功能真的是异常火爆啊,我也忍不住去弄了一波,昨晚在看博客的时候发现有大牛发了一个相关的原理解释,我看完之后,赶紧自己记录学习一下。让我们来回顾下微信上的这个小功能的操...
  • rainbowchou
  • rainbowchou
  • 2016年01月27日 12:21
  • 2695

图像预处理与特征提取(1)——白化处理和直方图均衡化

我们从逐像素处理来开始讲诉图像预处理。我们将代表原始图像的二维矩阵标记为P P,其中的p ij  p_{ij}代表第i i行和第j j列的像素值,代表该像素点的灰度强度。逐像素处理返回的就是和P P尺...
  • jxwhg
  • jxwhg
  • 2015年12月05日 16:18
  • 3606

警惕日本文化的侵蚀

警惕日本文化的侵蚀 Musicwind 2005-5-29         我们现在所使用的白话文的很多词,都是从日本引入的,比如“物理”、“化学”。而如今,我们也渐渐熟悉了来自日本国的另一些名词,如...
  • Musicwind
  • Musicwind
  • 2005年03月27日 22:50
  • 1919

android使用opencv图片腐蚀与扩张

数学形态学中运算有 膨胀(或扩张)、腐蚀(或侵蚀)、开启、闭合、骨架抽取、极线腐蚀、击中击不中变换、Top-hat变换、颗粒分析、流域变换、形态学梯度等,其中腐蚀与扩张就是我们今天所有讲的要点。ope...
  • xy1213236113
  • xy1213236113
  • 2018年01月23日 23:41
  • 23

POJ图像模糊处理

描述 给定n行m列的图像各像素点的灰度值,要求用如下方法对其进行模糊化处理: 1. 四周最外侧的像素点灰度值不变; 2. 中间各像素点新灰度值为该像素点及其上下左右相邻四个像素点原灰度值的平均...
  • Sylar2016
  • Sylar2016
  • 2017年02月28日 09:13
  • 367

Matlab处理图像的一般方法

Matlab是强大的数学问题处理软件,同时也是图像处理强有力的工具。本文通过几个实例具体介绍Matlab下如何进行图像处理。 (1)图像的读取与输出 Matlab读取图像的基本方法是 image...
  • Sync_hronize
  • Sync_hronize
  • 2015年04月06日 22:03
  • 673

opencv 图像分块处理

图像分块处理
  • chaihuimin
  • chaihuimin
  • 2016年09月22日 09:43
  • 2451

数字图像处理,图像的伪彩色处理

主要功能是使灰度图中亮度越高的像素点,在伪彩色图中对应的点越趋向于红色;亮度越低,则对应的伪彩色越趋向于蓝色; 代码: clc; close all; clear; img=imread('oct.b...
  • EbowTang
  • EbowTang
  • 2015年04月15日 17:53
  • 2182
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图像的侵蚀处理
举报原因:
原因补充:

(最多只允许输入30个字)