C++实现卷积操作

C++实现卷积操作卷积操作的C++实现#include<opencv2/opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/core/core.hpp>usingnamespacestd;usingnamespacecv;MatKernel_test_3_3=(…

大家好,又见面了,我是你们的朋友全栈君。

卷积操作的C++实现

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>

using namespace  std;
using namespace  cv;

Mat Kernel_test_3_3 = (
	Mat_<double>(3, 3) <<
	0, -1, 0,
	-1, 5, -1,
	0, -1, 0);
void Convlution(Mat  InputImage, Mat  OutputImage, Mat kernel)
{
	//计算卷积核的半径
	int sub_x = kernel.cols / 2;
	int sub_y = kernel.rows / 2;
	//遍历图片  
	for (int image_y = 0; image_y < InputImage.rows - 2 * sub_y; image_y++)
	{
		for (int image_x = 0; image_x < InputImage.cols - 2 * sub_x; image_x++)
		{
			int pix_value = 0;
			for (int kernel_y = 0; kernel_y < kernel.rows; kernel_y++)
			{
				for (int kernel_x = 0; kernel_x < kernel.cols; kernel_x++)
				{
					double  weihgt = kernel.at<double>(kernel_y, kernel_x);
					int value = (int)InputImage.at<uchar>(image_y + kernel_y, image_x + kernel_x);
					pix_value += weihgt*value;
				}
			}
			OutputImage.at<uchar>(image_y + sub_y, image_x + sub_x) = (uchar)pix_value;
		}
	}
}

int main()
{
	Mat srcImage = imread("1.jpg", 0);
	namedWindow("srcImage", WINDOW_AUTOSIZE);
	imshow("原图", srcImage);

	//filter2D卷积
	Mat dstImage_oprncv(srcImage.rows, srcImage.cols, CV_8UC1, Scalar(0));;
	filter2D(srcImage, dstImage_oprncv, srcImage.depth(), Kernel_test_3_3);
	imshow("filter2D卷积图", dstImage_oprncv);
	imwrite("1.jpg", dstImage_oprncv);

	//自定义卷积
	Mat dstImage_mycov(srcImage.rows, srcImage.cols, CV_8UC1, Scalar(0));
	Convlution(srcImage, dstImage_mycov, Kernel_test_3_3);
	imshow("卷积图3", dstImage_mycov);
	imwrite("2.jpg", dstImage_mycov);

	waitKey(0);
	return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140281.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JAX-WS SOA杂谈

    JAX-WS SOA杂谈[b][size=medium]代码优先[/size][color=blue]先编写类,通过注解定义wsdl的各项属性,基于类来生成wsdl文件[/color][size=medium]契约优先[/size][color=blue]先制定标准,与其它系统一起定义一个统一的标准,实现系统之间数据传输的规范性,即先有wsdl再有类[/color][size=me…

  • 对象数组「建议收藏」

    对象数组「建议收藏」定义一组多个对象的变量,就要用对象数组。对象数组的定义包含动态初始(类对象数组名[]=new类[长度];),数组里的每个元素都是引用类型的默认值;静态初始化(类对象数组名称[

  • Nginx配置Https并进行Http强制跳转Https

    Nginx配置Https并进行Http强制跳转Https

  • goland 激活码[最新免费获取]

    (goland 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32PGH0SQB-eyJsaWNlbnNlSWQiOi…

  • LR监控linux之详解rstatd的安装-Zee[通俗易懂]

    LR监控linux之详解rstatd的安装-Zee

  • 模板方法模式例子「建议收藏」

    模板方法模式例子「建议收藏」原文地址:http://www.cnblogs.com/jenkinschan/p/5768760.html一、概述 模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。二、结构类图三、解决问题模板方法就是提供一个算法框架,框架里面的步骤有些是父类已经定好的,有些需要子类自己实现。相当于要去办一件事情,行动的流

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号