21xrx.com
2024-05-20 10:22:17 Monday
登录
文章检索 我的文章 写文章
C++ OpenCV 实现图片圆形裁剪功能
2023-07-07 14:09:15 深夜i     --     --
C++ OpenCV 图片 圆形 裁剪功能

在日常开发和设计中,我们经常需要对图片进行裁剪处理以获得心仪的尺寸和形状。其中,圆形裁剪是一种常用的方法,常用于裁剪头像、圆形标志等。

C++是一种常用的编程语言,而OpenCV则是一款广泛应用于计算机视觉领域的开源计算机视觉库。本文将介绍利用C++和OpenCV实现图片圆形裁剪的方法。

首先,我们需要导入OpenCV库并读取要裁剪的图片。代码如下:

 c++

#include "opencv2/opencv.hpp"

using namespace cv;

int main(int argc, char** argv)

{

  Mat src = imread("input.jpg", IMREAD_COLOR);

  if (src.empty())

  

    return -1;

  

  namedWindow("Original Image", WINDOW_AUTOSIZE);

  imshow("Original Image", src);

  waitKey(0);

  return 0;

}

接下来,我们将图片裁剪成圆形。具体方法是将图片设置为正方形,然后在正方形图像中心截取一个圆形区域。具体的步骤如下:

1. 将图片最小边长定义为正方形边长;

2. 将正方形图片中心作为切割中心;

3. 从正方形图片中截取一个半径为正方形边长一半的圆形区域。

代码如下:

 c++

int main(int argc, char** argv)

{

  Mat src = imread("input.jpg", IMREAD_COLOR);

  if (src.empty())

  

    return -1;

  

  namedWindow("Original Image", WINDOW_AUTOSIZE);

  imshow("Original Image", src);

  int min_edge = min(src.cols, src.rows);

  int max_radius = min_edge / 2;

  Point2f center((src.cols - 1) / 2.0f, (src.rows - 1) / 2.0f);

  Mat mask(src.size(), CV_8UC1, Scalar::all(0));

  circle(mask, center, max_radius, Scalar::all(255), -1);

  Mat masked_img;

  src.copyTo(masked_img, mask);

  namedWindow("Masked Image", WINDOW_AUTOSIZE);

  imshow("Masked Image", masked_img);

  waitKey(0);

  return 0;

}

最后,我们可以将圆形裁剪后的图片保存。代码如下:

 c++

int main(int argc, char** argv)

{

  Mat src = imread("input.jpg", IMREAD_COLOR);

  if (src.empty())

  

    return -1;

  

  namedWindow("Original Image", WINDOW_AUTOSIZE);

  imshow("Original Image", src);

  int min_edge = min(src.cols, src.rows);

  int max_radius = min_edge / 2;

  Point2f center((src.cols - 1) / 2.0f, (src.rows - 1) / 2.0f);

  Mat mask(src.size(), CV_8UC1, Scalar::all(0));

  circle(mask, center, max_radius, Scalar::all(255), -1);

  Mat masked_img;

  src.copyTo(masked_img, mask);

  namedWindow("Masked Image", WINDOW_AUTOSIZE);

  imshow("Masked Image", masked_img);

  imwrite("output.jpg", masked_img);

  waitKey(0);

  return 0;

}

通过以上方法,我们可以轻松地实现C++和OpenCV的图片圆形裁剪功能。这种方法能够广泛应用于头像、标志等圆形图片裁剪的场景中,为我们带来很大的便利。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复