程序笔记   发布时间:2022-07-12  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了OpenCV-PS羽化操作大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

作者:Steven 版权声明:著作权归作者所有࿰c;商业转载请联系作者获得授权࿰c;非商业转载请注明出处

功能函数

// 羽化
cv::Mat Eclosion(cv::Mat src, cv::Point center,float level)
{
	if (level>0.9)
		level = 0.9f;
	float diff = (1-level) * (src.rows / 2 * src.rows / 2 + src.cols / 2 * src.cols / 2);
	cv::Mat result = src.clone();
	for (int i = 0; i < result.rows; ++i)
	{
		for (int j = 0; j < result.cols; ++j)
		{
			float dx = float(center.x - j);
			float dy = float(center.y - i);
			float ra = dx * dx + dy * dy;
			float m = ((ra-diff) / diff * 255)>0? ((ra - diff) / diff * 255):0;
			int b = result.at<Vec3b>(i, j)[0];
			int g = result.at<Vec3b>(i, j)[1];
			int r = result.at<Vec3b>(i, j)[2];
			b = (@R_675_10185@(b+ m);
			g = (@R_675_10185@(g + m);
			r = (@R_675_10185@(r + m);
			result.at<Vec3b>(i, j)[0] = (b > 255 ? 255 : (b < 0 ? 0 : b));
			result.at<Vec3b>(i, j)[1] = (g > 255 ? 255 : (g < 0 ? 0 : g));
			result.at<Vec3b>(i, j)[2] = (r > 255 ? 255 : (r < 0 ? 0 : r));
		}
	}
	return result;
}

测试代码

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

cv::Mat Eclosion(cv::Mat src, cv::Point center, float level);

int main()
{
	cv::Mat src = imread("test.jpg");

	/***********       羽化   ***********************/
	cv::Mat eclosion1 = Eclosion(src, cv::Point(src.cols / 2, src.rows / 2), 0.5f);
	cv::Mat eclosion2 = Eclosion(src, cv::Point(src.cols / 2, src.rows / 2), 0.3f);
	imshow("原图", src);
    imshow("羽化1", eclosion1);
	imshow("羽化2", eclosion2);
	waitKey(0);
	return 0;
}

// 羽化
cv::Mat Eclosion(cv::Mat src, cv::Point center,float level)
{
	if (level>0.9)
		level = 0.9f;
	float diff = (1-level) * (src.rows / 2 * src.rows / 2 + src.cols / 2 * src.cols / 2);
	cv::Mat result = src.clone();
	for (int i = 0; i < result.rows; ++i)
	{
		for (int j = 0; j < result.cols; ++j)
		{
			float dx = float(center.x - j);
			float dy = float(center.y - i);
			float ra = dx * dx + dy * dy;
			float m = ((ra-diff) / diff * 255)>0? ((ra - diff) / diff * 255):0;
			int b = result.at<Vec3b>(i, j)[0];
			int g = result.at<Vec3b>(i, j)[1];
			int r = result.at<Vec3b>(i, j)[2];
			b = (@R_675_10185@(b+ m);
			g = (@R_675_10185@(g + m);
			r = (@R_675_10185@(r + m);
			result.at<Vec3b>(i, j)[0] = (b > 255 ? 255 : (b < 0 ? 0 : b));
			result.at<Vec3b>(i, j)[1] = (g > 255 ? 255 : (g < 0 ? 0 : g));
			result.at<Vec3b>(i, j)[2] = (r > 255 ? 255 : (r < 0 ? 0 : r));
		}
	}
	return result;
}

测试效果 

OpenCV-PS羽化操作

图1 原图

OpenCV-PS羽化操作

图2 羽化强度0.5效果图

OpenCV-PS羽化操作

图3 羽化强度0.3效果图

       本文提供的PS羽化操作函数࿰c;可以实现类似PS中羽化的效果࿰c;即目标区域中心区不变࿰c;边缘区模糊化࿰c;center参数是羽化中心࿰c;level是羽化强度࿰c;该值越大则羽化程度越大࿰c;使整张图被羽化的区域变大~

       如果文章帮助到你了࿰c;可以点个赞让我知道࿰c;我会很快乐~加油!

大佬总结

以上是大佬教程为你收集整理的OpenCV-PS羽化操作全部内容,希望文章能够帮你解决OpenCV-PS羽化操作所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。