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)


相关推荐

  • 无线充qi协议c语言详解,QI无线充通信协议数据包格式解析

    无线充qi协议c语言详解,QI无线充通信协议数据包格式解析QI通信数据格式编码:协议规定时钟信号的频率应该是Fclk=2(4%)KHZ,所以每一位的传输时间约500us,如图所示数据0:500us的高电平,或者500us的低电平数据1:250us高电平+250us低电平,或者250us低电平+250us高电平电源接收端(移动设备端)采用11位异步串行格式传输数据字节数据编码格式为:起始位0、8位数据位、一个奇偶校验位(如果数据字节包含…

  • Ubuntu连接手机_手机连接linux系统

    Ubuntu连接手机_手机连接linux系统SSHDroid 是个SSH Server for Android设备。该应用可以让你通过PC或命令连接androidConnect through

  • SQL Server 2008 R2 详细安装图文教程

    SQL Server 2008 R2 详细安装图文教程SQLServer2008R2安装教程1、打开安装包,点击setup.exe2、选择左侧列表中的“安装”。3、点击“全新安装或向现有安装添加功能”。4、检测完成点击确定。5、选择版本和密钥,然后下一步。(因为有版权要求,在这不能给安装密钥,需要安装密钥的请私信博主)6、选择“我接受许可条款”。点击下一步7、点击“安装”。8、…

  • qq空间秒赞技术是如何实现的_微信自动秒赞

    qq空间秒赞技术是如何实现的_微信自动秒赞手机QQ空间客户端无法秒赞功能,个人建议不要使用秒赞软件。使用秒赞软件会被官方处罚,会有哪些处罚?1、QQ空间无法发布说说动态,无法评论好友说说动态。2、QQ空间被封禁无法访问3、QQ空间被永久封禁,无法解封。以上三点都是使用秒赞软件后出现的情况,强烈建议不要使用秒赞软件,使用了后果自负。…

    2022年10月28日
  • idea激活码2022【最新永久激活】

    (idea激活码2022)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32P…

  • java判断闰年的方法_Java判断闰年的2种方法示例|chu「建议收藏」

    java判断闰年的方法_Java判断闰年的2种方法示例|chu「建议收藏」前言:给定一个年份,判断这一年是不是闰年。当以下情况之一满足时,这一年是闰年:1.年份是4的倍数而不是100的倍数;2.年份是400的倍数。其他的年份都不是闰年。方法一:publicclassBissextile{booleanbissextile(intyear){//创建boolean类型的方法if(year%4==0&&year%1…

发表回复

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

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