(个人)基于深度学习的中国传统特色图像的风格迁移创新实训第三周(2)

接下来按照论文里面的思想逐步实现:

1.读取需要的图片,为灰色图像,Sobel算子设置指针

IplImage* srcImg = cvLoadImage(".\\srcImg\\renlian1.jpg");
	IplImage* gradImg[corNum];

	IplImage* sobelImg[corNum];
	IplImage* graySrcImg = cvCreateImage(cvGetSize(srcImg), srcImg->depth, 1);


2.对原图像进行高斯滤波器平滑处理,之后转换成灰度值图像。

	cvCvtColor(srcImg, graySrcImg, CV_BGR2GRAY);        

	for(int i=0; i<1; i++)
		cvSmooth(graySrcImg, graySrcImg, CV_GAUSSIAN, 3, 0, 0);


3.利用Sobel算子对灰度值图像进行卷积,计算出来Gx和Gy:

int sobel[2][9]={{-1, 0, 1,-2, 0, 2,-1, 0, 1}, {-1, -2, -1,  0,  0,  0, 1,  2,  1}};
	float tempMag, tempAng;
	float magX, magY;

	for(int i=0; i<height; i++)
	{
		for(int j=0; j<width; j++)
		{
			unitArr[i][j].floMag = (int)( (unitArr[i][j].floMag / maxGrad) * 255 + 0.5);
		}
	}

	for(int i=0; i<2; i++)
	{
		int tempA, tempB;

		for(int m=0; m< height; m++)
		{
			for(int n=0; n< width; n++)
			{	
				for(int l=0; l< winSize*winSize; l++)
				{
					tempA = abs(m + l/3 - 1) % hth;
					tempB = abs(n + l%3 - 1) % wth;
					
					tempSum = unitArr[tempA][tempB].floMag;
					finalSum += tempSum * sobel[i][l];
				}

				finalSum = finalSum / MAX_VAL;

				if(i ==0)
				{
					finalSum = (finalSum > 255)? 255 : finalSum;
					finalSum = (finalSum < -255)? -255: finalSum;

					unitArr[m][n].floX = finalSum;
				}

				else
				{
					finalSum = (finalSum > 255)? 255 : finalSum;
					finalSum = (finalSum < -255)? -255: finalSum;
					
					unitArr[m][n].floY = finalSum;
				}

				finalSum = 0;
				tempSum = 0;
			}
		}

4.求出梯度的方向,方便梯度∠的计算:

unitArr[i][j].floX = -magY;
			unitArr[i][j].floY = magX;

5.利用Gx和Gy 求出一阶导数:

for(int i=0; i<corNum; i++)
	{
		gradImg[i] = cvCreateImage(cvGetSize(srcImg), graySrcImg->depth, 1);
		cvCopy(graySrcImg, gradImg[i], NULL);
	}

6.之后就可以得到输出的图像了。


ps:最开始在配置opencv的环境的时候发生 了很多问题,总是缺少各种各样的文件。

其中的一些问题可以参考以下这篇博客:https://www.cnblogs.com/linshuhe/p/5764394.html。感觉写得很详细。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值