大佬教程收集整理的这篇文章主要介绍了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;
}
本文提供的PS羽化操作函数c;可以实现类似PS中羽化的效果c;即目标区域中心区不变c;边缘区模糊化c;center参数是羽化中心c;level是羽化强度c;该值越大则羽化程度越大c;使整张图被羽化的区域变大~
以上是大佬教程为你收集整理的OpenCV-PS羽化操作全部内容,希望文章能够帮你解决OpenCV-PS羽化操作所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。