OpenCV-PS羽化操作

简介: OpenCV-PS羽化操作

功能函数

// 羽化
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 = (int)(b+ m);
      g = (int)(g + m);
      r = (int)(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 = (int)(b+ m);
      g = (int)(g + m);
      r = (int)(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羽化操作函数,可以实现类似PS中羽化的效果,即目标区域中心区不变,边缘区模糊化,center参数是羽化中心,level是羽化强度,该值越大则羽化程度越大,使整张图被羽化的区域变大~

相关文章
|
缓存 并行计算 C++
实践教程|旋转目标检测模型-TensorRT 部署(C++)
实践教程|旋转目标检测模型-TensorRT 部署(C++)
485 0
|
机器学习/深度学习 自然语言处理 开发工具
ModelScope--人像卡通化、人像美肤
利用ModelScope实现美拍人喜欢的人像处理卡通化、人像美肤
ModelScope--人像卡通化、人像美肤
完美解决->“pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。”
完美解决->“pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。”
完美解决->“pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。”
|
8月前
|
并行计算 开发工具 git
NPU上运行onnxruntime
在Ascend环境下使用onnxruntime推理时,若安装了GPU版本的onnxruntime(`onnxruntime-gpu`),可能会因缺少CUDA组件报错。正确做法是卸载`onnxruntime-gpu`,并根据官方文档适配NPU,通过源码构建支持CANN的onnxruntime whl包。具体步骤为克隆onnxruntime源码,使用`--use_cann`参数构建,并安装生成的whl包。最后,配置CANNExecutionProvider进行推理。
1352 10
|
机器学习/深度学习 自动驾驶 算法
深度学习在图像识别中的应用与发展
本文将深入探讨深度学习技术在图像识别领域的应用,通过案例分析展示其最新进展。我们将从基本原理出发,了解深度学习如何改变图像处理和识别的方式,并展望其未来可能的发展方向。
|
机器学习/深度学习 人工智能 弹性计算
阿里云AI服务器价格表_GPU服务器租赁费用_AI人工智能高性能计算推理
阿里云AI服务器提供多样化的选择,包括CPU+GPU、CPU+FPGA等多种配置,适用于人工智能、机器学习和深度学习等计算密集型任务。其中,GPU服务器整合高性能CPU平台,单实例可实现最高5PFLOPS的混合精度计算能力。根据不同GPU类型(如NVIDIA A10、V100、T4等)和应用场景(如AI训练、推理、科学计算等),价格从数百到数千元不等。详情及更多实例规格可见阿里云官方页面。
983 1
|
存储 缓存 程序员
C++内存管理:避免内存泄漏与性能优化的策略
C++内存管理涉及程序稳定性、可靠性和性能。理解堆和栈的区别至关重要,其中堆内存需手动分配和释放。避免内存泄漏的策略包括及时释放内存、使用智能指针和避免野指针。性能优化策略则包括减少内存分配、选用合适数据结构、避免深拷贝及缓存常用数据。通过这些最佳实践,可提升C++程序的效率和质量。
|
机器学习/深度学习
YOLOv5改进 | 注意力篇 | ACmix自注意力与卷积混合模型(提高FPS+检测效率)
YOLOv5改进 | 注意力篇 | ACmix自注意力与卷积混合模型(提高FPS+检测效率)
356 0
|
存储 物联网 数据安全/隐私保护
如何让AppleWatch自动锁定Mac?
我们都知道AppleWatch支持了解锁Mac的功能,如果您的 Mac(2013 年中或后续机型)安装了macOS Sierra(Apple Watch Series 1 和 Apple Watch Series 2)、macOS High Sierra 或更高版本(Apple Watch Series 3 或后续机型),那么当其从睡眠模式唤醒时,Apple Watch 会立即解锁您的 Mac。
1669 1
如何让AppleWatch自动锁定Mac?
|
编解码 定位技术
12米与30米TanDEM-X数字高程模型DEM数据的下载申请方法
12米与30米TanDEM-X数字高程模型DEM数据的下载申请方法
285 2