精华内容
下载资源
问答
  • 图像边缘处理

    2012-12-09 17:31:26
    图像边缘处理的操作代码,调试过的,直接可以执行,效果很好,忍痛割爱。
  • Java OpenCV-4.0.0 图像处理12 图像边缘处理 Java OpenCV-4.0.0 图像处理12 图像边缘处理 /** * OpenCV-4.0.0 边沿处理(添加边沿) */ public static void copyMakeBorder() { Mat src= Imgcodecs.imread("C:...

    Java OpenCV-4.0.0 图像处理12 图像边缘处理

    Java OpenCV-4.0.0 图像处理12 图像边缘处理 添加边沿

    package com.xu.image;
    
    import org.opencv.core.Core;
    import org.opencv.core.Mat;
    import org.opencv.core.Scalar;
    import org.opencv.core.Size;
    import org.opencv.highgui.HighGui;
    import org.opencv.imgcodecs.Imgcodecs;
    import org.opencv.imgproc.Imgproc;
    
    /**  
     * 
     * @Title: OpenCV.java   
     * @Package com.xu.opencv   
     * @Description: TODO   
     * @author: xuhyacinth     
     * @date: 2019年1月17日 下午7:54:15   
     * @version V-1.0 
     * @Copyright: 2019 xuhyacinth
     *
     */
    public class OpenCV {
    
    	static {
    		//在使用OpenCV前必须加载Core.NATIVE_LIBRARY_NAME类,否则会报错
    		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    	}
    
    	public static void main(String[] args) {
    		copyMakeBorder();
    	}
    
    	/**
    	 * OpenCV-4.0.0 边沿处理(添加边沿)
    	 */
    	public static void copyMakeBorder() {
    		Mat src= Imgcodecs.imread("C:\\Users\\Administrator\\Pictures\\0001.jpg");
    		Mat dst=new Mat();
    		int top=(int)(src.rows()*0.05);
    		int bottom=(int)(src.rows()*0.05);
    		int left=(int)(src.cols()*0.05);
    		int right=(int)(src.cols()*0.05);
    		Core.copyMakeBorder(src, dst, top, bottom, left, right, Core.BORDER_CONSTANT,new Scalar(0, 0, 255));
    		//BORDER_CONSTANT = 0,
    		//BORDER_REPLICATE = 1,
    		//BORDER_REFLECT = 2,
    		//BORDER_WRAP = 3,
    		//BORDER_REFLECT_101 = 4,
    		//BORDER_TRANSPARENT = 5,
    		//BORDER_REFLECT101 = BORDER_REFLECT_101,
    		//BORDER_DEFAULT = BORDER_REFLECT_101,
    		//BORDER_ISOLATED = 16;
    		Imgproc.resize(dst, dst, new Size(dst.cols()/2,dst.rows()/2));
    		HighGui.imshow("边沿处理(添加边沿)", dst);
    		HighGui.waitKey(0);
    	}
    
    }
    
    
    

    添加边缘

    展开全文
  • 为了更好地进行巷道日常矿压与支护监测,提出采用视频图像处理技术对井下...阐述了几种常用的图像边缘检测的边缘检测算子,分析了这些边缘检测算子的特点,并使用Matlab实现了对某图像的边缘检测,比较了这些算子的优缺点。
  • //本节讲述 图像处理之 图像边缘处理; #include <opencv2/opencv.hpp> #include #include <math.h> using namespace std; using namespace cv; Mat src, dst1, dst2, dst3, dst4, asd, gray_src; int ...

    理论补充:理论知识
    !!!!回顾时一定要结合上面理论知识的链接

    源程序:
    #include “stdafx.h”

    //本节讲述 图像处理之 图像边缘处理;
    #include <opencv2/opencv.hpp>
    #include
    #include <math.h>

    using namespace std;
    using namespace cv;

    Mat src, dst1, dst2, dst3, dst4, asd, gray_src;
    int threshold_value = 127;
    int threshold_max = 255;

    //const char*
    void shreshold_demo(int, void*);
    const char*output_title = “自定义算子”;
    char input_title[] = “原图”;

    int main(int argc, char**argv)
    {
    src = imread(“C:/Users/Rubison.DELL/Desktop\杂物/壁纸/小白2.jpg”); //存放自己图像的路径
    if (!src.data)
    {
    printf(“could not load image…\r\n”);
    return -1;
    }

    namedWindow(input_title, CV_WINDOW_AUTOSIZE);
    imshow(input_title, src);
    
    int top = (int)(0.05*src.rows);
    int bottom = (int)(0.05*src.rows);
    int left = (int)(0.05*src.cols);
    int right = (int)(0.05*src.cols);
    
    RNG rng(12345);
    int borderType = BORDER_DEFAULT;
    
    int c = 0;
    while (true)
    {
    	c = waitKey(500);  
    	if ((char)c == 27)   //ESC
    	{
    		break;
    	}
    	if ((char)c == 'r')
    	{
    		borderType = BORDER_REPLICATE;
    	}
    	else if ((char)c == 'v')
    	{
    		borderType = BORDER_WRAP;
    	}
    	else if ((char)c == 'c')
    	{
    		borderType = BORDER_CONSTANT;
    	}
    //	else{ borderType = BORDER_DEFAULT; }
    	Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
    	copyMakeBorder(src, dst1, top, bottom, left, right, borderType,color);
    	imshow("边缘处理", dst1);
    }
    
    
    waitKey(0);
    destroyAllWindows();
    return 0;
    

    }

    运行结果:在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    补充2020.9.7

    程序补充:
    相关链接:sobel算子相关知识

    #include "stdafx.h"
    
    //本节讲述 图像处理之 图像边缘处理;
    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    using namespace cv;
    
    Mat src, dst1, dst2, dst3, dst4, asd, gray_src;
    int threshold_value = 127;
    int threshold_max = 255;
    
    //const char*
    void shreshold_demo(int, void*);
    const char*output_title = "自定义算子";
    char input_title[] = "原图";
    
    int main(int argc, char**argv)
    {
    	src = imread("C:/Users/Rubison.DELL/Desktop\\杂物/壁纸/小白2.jpg");  //存放自己图像的路径 
    	if (!src.data)
    	{
    		printf("could not load image...\r\n");
    		return -1;
    	}
    
    	namedWindow(input_title, CV_WINDOW_AUTOSIZE);
    	imshow(input_title, src);
    	GaussianBlur(src,dst1,Size(3,3),0,0);
    	cvtColor(dst1, gray_src,CV_BGR2GRAY);
    	//imshow("灰度",gray_src);
    
    	Mat xgrad, ygrad, MRy/*,xygrad*/, xygrad2;
    	Sobel(gray_src, xgrad, CV_16S, 1, 0,3);   //注意
    	Sobel(gray_src, ygrad, CV_16S, 0, 1, 3);
    	//Sobel(gray_src, MRy, -1, 0, 1, 3);     //默认深度时,会截断
    	convertScaleAbs(xgrad, xgrad);  //由于会出现负值的情况,因此使用convertScalerAbs() 转换为绝对值的形式
    	convertScaleAbs(ygrad, ygrad);
    	imshow("xgrad", xgrad);
    	imshow("ygrad", ygrad);
    	//imshow("MRy", MRy);
    
    	addWeighted(xgrad, 0.5, ygrad, 0.5, 0, xygrad2);
    	imshow("xy手动相加梯度叠加",xygrad2);
    
    
    
    	//两幅图像素简单相加==addWeighted()  且手动像素相加边界更醒目 注意!! sobel算子的改进函数Scharr()函数;
    	Mat xygrad =Mat(xgrad.size(), xgrad.type());
    	int width = xgrad.cols;
    	int height = ygrad.rows;
    	for (int row = 0; row < height; row++)
    	{
    		for (int col = 0; col < width; col++)
    		{
    			int xg = xgrad.at<uchar>(row, col);
    			int yg = ygrad.at<uchar>(row, col);
    			int xy = xg + yg;
    			xygrad.at<uchar>(row, col) = saturate_cast<uchar>(xy);
    		}
    	}
    	imshow("xy梯度叠加", xygrad);
    
    	waitKey(0);
    	destroyAllWindows();
    	return 0;
    
    }
    

    运行结果:
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 图像边缘问题 图像做卷积操作时,边缘像素无法处理到,原因在于边缘像素没有完全和kernel重叠。因此,当3 X 3滤波时,边缘有1个像素没有被处理,5 X 5时有2个像素没有被处理处理边缘 在卷积之前增加边缘像素,...

    本文章由公号【开发小鸽】发布!欢迎关注!!!


    老规矩–妹妹镇楼:

    一. 图像边缘问题

           图像做卷积操作时,边缘像素无法处理到,原因在于边缘像素没有完全和kernel重叠。因此,当3 X 3滤波时,边缘有1个像素没有被处理,5 X 5时有2个像素没有被处理。

    二. 处理边缘

           在卷积之前增加边缘像素,填充像素值。比如在3 X 3的kernel作用的图像上添加1个像素的边缘,这样就能确保图像的边缘被处理,在卷积处理之后再去掉这些添加的边缘。

    三. 处理边缘的方式

           OpenCV中默认的边缘处理方式是: BORDER_DEFAULT,此外还有以下几种:

    1. BORDER_CONSTANT–用指定像素值填充边缘
    2. BORDER_REPLICATE–用已经存在的边缘像素值填充边缘
    3. BORDER_WRAP–用另一边的像素来填充边缘

    四. 添加边缘API

           cv::copyMakeBorder

    copyMakeBorder(
    	Mat src,	//输入图像
    	Mat dst,	//输出图像
    	int top,		//边缘尺寸
    	int bottom,
    	int left, 
    	int right,
    	int borderType,	//边缘类型
    	Scalar color
    )
    

    下面是代码:

    /*****处理边缘*****/
    
    #include<iostream>
    #include<opencv2/opencv.hpp>
    #include<string>
    using namespace std;
    
    string in_title = "input image";
    string ou_title = "output image";
    int main() {
    	cv::Mat src, dst;
    	src = cv::imread("1.jpg");
    	cv::namedWindow(in_title, cv::WINDOW_NORMAL);
    	cv::imshow(in_title, src);
    	//边缘的尺寸
    	int top = (int)(0.05 * src.rows);
    	int bottom = (int)(0.05 * src.rows);
    	int left = (int)(0.05 * src.cols);
    	int right = (int)(0.05 * src.cols);
    	//随机数
    	cv::RNG rng(12345);
    	int border_type = cv::BORDER_DEFAULT;
    
    	int c = 0;
    	while (true) {
    		c = cv::waitKey(500);
    		//ESC
    		if ((char)c == 27)
    			break;
    		//各种边缘类型
    		else if ((char)c == 'r')
    			border_type = cv::BORDER_REPLICATE;
    		else if ((char)c == 'w')
    			border_type = cv::BORDER_WRAP;
    		else if ((char)c == 'd')
    			border_type = cv::BORDER_DEFAULT;
    		else if ((char)c == 'c')
    			border_type = cv::BORDER_CONSTANT;
    		else if ((char)c == 'i')
    			border_type = cv::BORDER_ISOLATED;
    		
    		//颜色
    		cv::Scalar color = cv::Scalar(rng.uniform(0, 255), rng.uniform(0, 255),
    			rng.uniform(0, 255));
    		//添加边缘
    		cv::copyMakeBorder(src, dst, top, bottom, left, right,
    			border_type, color);
    		cv::namedWindow(ou_title, cv::WINDOW_NORMAL);
    		cv::imshow(ou_title, dst);
    
    	}
    	return 0;
    }
    

    !!​**

    展开全文
  • 概述了目前边缘检测技术和边界跟踪技术。归纳了一些常用的处理算法。并根据边缘检测结果提出了几种后续处理方 法,边缘连接及边界跟踪提取,以得到最终的结果:目标边缘图像
  • 1.边缘问题 ...在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3x3在四周各填充1个像素的边缘,这样就确保图像边缘处理,在卷积处理之后再去掉这些边缘。openCV中默认的处理方法是:...

    1.边缘问题

    图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理。

    2.处理方法

    在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3x3在四周各填充1个像素的边缘,这样就确保图像的边缘被处理,在卷积处理之后再去掉这些边缘。openCV中默认的处理方法是: BORDER_DEFAULT,此外常用的还有如下几种:

     - BORDER_CONSTANT 填充边缘用指定像素值

     - BORDER_REPLICATE 填充边缘像素用已知的边缘像素值

     - BORDER_WRAP 用另外一边的像素来补偿填充

    3.给图像添加边缘API

    void copyMakeBorder( const Mat& src, Mat& dst,int top, int bottom, int left, int right,int borderType, const Scalar& value=Scalar() );

    参数1:输入图像

    参数2:输出图像

    参数3,4,5,6:图像上下左右的边缘长度,一般取值一样

    参数7:边缘处理类型

    参数8:填充色

    4.实现代码

    #include "stdafx.h"
    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <math.h>
    using namespace std;
    using namespace cv;
    
    char inputName[] = "input name";
    char outputName[] = "output name";
    int main()
    {
    	Mat src, dst;
    	src = imread("D:/demo.jpg");
    	if (src.empty())
    	{
    		cout << "找不到图像" << endl;
    		return -1;
    	}
    	namedWindow(inputName, CV_WINDOW_AUTOSIZE);
    	imshow(inputName, src);
    	namedWindow(outputName, CV_WINDOW_AUTOSIZE);
    
    	//边缘添加
    	int top = (int)(0.05*src.rows);
    	int bottom = (int)(0.05*src.rows);
    	int left = (int)(0.05*src.cols);
    	int right= (int)(0.05*src.cols);
    	RNG rng(12345);//生成随机数
    	int borderType = BORDER_DEFAULT;
    	
    	int c = 0;
    	while (true)
    	{
    		c = waitKey(500);
    		if ((char)c == 27)//ESC键
    		{
    			break;
    		}
    		else if ((char)c=='r')
    		{
    			borderType = BORDER_REPLICATE;
    		}
    		else if((char)c=='w')
    		{
    			borderType = BORDER_WRAP;
    		}
    		else if ((char)c =='c')
    		{
    			borderType = BORDER_CONSTANT;
    		}
    		Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));//随机生成颜色
    		copyMakeBorder(src, dst, top, bottom, left, right, borderType, color);
    		imshow(outputName, dst);
    	}
    	waitKey(0);
    	return 0;
    }

    通过键盘控制不同边缘处理方法。

    5.运行结果

    展开全文
  • MFC3-图像边缘处理

    2017-08-24 17:19:24
    因为实现边缘检测,所以先在EdgesProcess.h中把头文件添加进来。如下图: 在MFC应用程序中我们经常使用类视图,在这里面可以添加函数和变量。如图: 之后在类视图中CEdgesProcessDlg右键添加变量TheImage,变量...
  • read_image (Image, 'fabrik') dev_close_window () get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, 'black', WindowID) sobel_amp (Image, EdgeAmplitude, 'thin_sum_abs', 3) ...
  • 功能:使用边缘幅值图像消除边缘缺陷。 close_edges_length 功能:使用边缘幅值图像消除边缘缺陷。 derivate_gauss 功能:用高斯派生物对一个图像卷积。 diff_of_gauss 功能:近似高斯的拉普拉斯算子。 ...
  • 中提取一些边缘图像来使用edges_color和edges_image的输出之间的 差异。 dev_update_off () read_image (Image, 'olympic_stadium') get_image_size (Image, Width, Height) dev_close_window () dev_open_window...
  • read_image (Image, 'particle') highpass_image (Image, Highpass, 21, 21) threshold (Highpass, Region, 132, 255) opening_circle (Region, RegionOpening, 1.5) dev_display (Image) dev_display ...
  • 文章中,我们较为详细地介绍了OpenCV中几种常用的线性滤波方法原理和相关API的使用,本文将在此基础上继续讲解OpenCV中中值和双边两种非线性滤波,以及在图像滤波过程中OpenCV对图像边缘处理方法。 1. 非...
  • 图像缩放边缘处理

    2016-01-19 09:42:53
    图像边缘处理提供多种处理方式包括:近邻法插值、双线性插值、立方卷积插值、边缘移动匹配插值、边缘自适应插值算法、改进的边缘自适应插值算法。含有设计文档。
  • Matlab多种图像边缘检测与分割处理-多种图像边缘检测与分割处理.rar 是一些边缘检测算子,用这些算子实现图像边缘检测的程序
  • 图像边缘检测处理

    2014-03-15 10:53:42
    用canny算子实现图像边缘检测处理图像。
  • 图像处理边缘检测

    2017-04-27 11:14:22
    图像处理边缘检测
  • 【图像处理】RGB图像边缘检测

    千次阅读 2018-10-03 15:46:39
       在学习图像处理时,首先接触到的就是灰度图像的边缘检测,这是图像处理最基础的也是最重要的一环,熟悉图像边缘检测有助于我们学习其他的数字图像处理方法。由于图像的边缘区域会存在明显的像素值阶跃,因此...
  • 图像处理】边缘处理

    千次阅读 2019-04-27 00:00:05
    边缘处理方法: 在卷积开始前增加边缘像素,填充限速值为0或者RGB黑色,如3*3在四周各填充一个像素的边缘,这样就确保图像的边缘被处理,在卷积处理之后再去掉这些边缘,opencv中默认的处理方法是:BORDER_DEFAULT...
  • 图像边缘锯齿及处理方法

    万次阅读 2017-08-21 20:40:08
    图像边缘锯齿处理
  • 【图像处理图像边缘检测 最近在学数字图像处理,发现原来学习数学还是很有用的,像很多人工智能的东西很多都用到了图像处理,数字图像处理设计的范围太广,我也是刚开始学习,这里把自己学到的一点一滴记录...
  • 边缘提取图像边缘定义图像边缘类型边缘提取方法 图像边缘定义 图像边缘类型 边缘提取方法 基于梯度的边缘提取 这种边缘提取方法的问题:对于阈值T的选择,总会导致不连贯的提取结果。 Canny边缘提取 创新之...
  • 图像处理 大作业,,图像边缘检测 通过利用图像特征提取技术来对数字图像进行边缘检测。首先利用灰度处理函数rgb2gray(RGB)将彩色图像转为灰度图像,并利用高斯平滑滤波模板进行高斯平滑滤波,然后使用数字图像...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,913
精华内容 3,565
关键字:

图像边缘处理