发 帖  
原厂入驻New

如何用Python给头像添加国旗?

48 python
分享
2020-11-11 08:02:55   评论 分享淘帖 邀请回答
3个回答
  思路分析
  好比把大象装进冰箱要几步一样,为头像添加上国旗也是如此,先不讲通过什么语言实现,毕竟语言只是工具,OK,如果那,那为头像添加上国旗则需要以下几个步骤:
  Step1:读取头像和国旗图案。
  Step2:把国旗叠加到头像上。
  Step3:把叠加后的图片保存。
  把大象放进冰箱只要这么几步,但是具体把国旗叠加到头像上,需要考虑的一体细节:
  国旗必须缩放到合适大小,才能放到头像上。
  国旗缩放后不能变形。
  因此:
  就把国旗的宽度缩放至头像宽度的1/4,然后高度也按照同样的比例进行缩放。
2020-11-11 14:45:17 评论

举报

  Python实现
  # -*- coding: utf8 -*-
  import cv2
  # Step1:读取头像和国旗图像。
  img_head = cv2.imread(‘head.jpg’)
  img_flag = cv2.imread(‘flag.jpg’)
  # Step2:把国旗叠加到头像上。
  # Step2.1:获取头像和国旗宽度
  w_head, h_head = img_head.shape[:2]
  w_flag, h_flag = img_flag.shape[:2]
  # Step2.2:根据宽度计算缩放比例
  scale = w_head / w_flag / 4
  # Step2.3:根据缩放比例缩放国旗
  img_flag = cv2.resize(img_flag, (0, 0), fx=scale, fy=scale)
  # Step2.4:获取缩放后国旗的新尺寸
  w_flag, h_flag = img_flag.shape[:2]
  # Step2.5:根据缩放后的尺寸叠加国旗到头像右下角
  for c in range(0, 3):
  img_head[w_head - w_flag:, h_head - h_flag:, c] = img_flag[:, :, c]
  # Step3:保存叠加后的图像
  cv2.imwrite(‘new_head.jpg’, img_head)
  
2020-11-11 14:45:39 评论

举报

  C++实现
  接下来,来看看C++执行相关的代码
  #include《iostream》
  #include《opencv2/opencv.hpp》
  #include《opencv2/highgui/highgui.hpp》
  #include《opencv2/imgproc/imgproc.hpp》
  using namespace std;
  using namespace cv;
  int main()
  {
  //Step1:读取头像和国旗图像。
  Mat img_head = imread(“head.jpg”);
  Mat img_flag = imread(“flag.jpg”);
  Mat img_flag_resized;
  //Step2:把国旗叠加到头像上。
  //Step2.1:获取头像和国旗宽度
  int w_head = img_head.cols;
  int h_head = img_head.rows;
  int w_flag = img_flag.cols;
  int h_flag = img_flag.rows;
  //Step2.2:根据宽度计算缩放比例
  double scale = (double)w_head/w_flag/4;
  //Step2.3:根据缩放比例缩放国旗
  resize(img_flag,img_flag_resized,Size(),scale,scale,INTER_NEAREST);
  //Step2.4:获取缩放后国旗的新尺寸
  w_flag = img_flag_resized.cols;
  h_flag = img_flag_resized.rows;
  //Step2.5:根据缩放后的尺寸叠加国旗到头像右下角
  Mat imageROI=img_head(Rect(w_head-w_flag,h_head-h_flag,w_flag,h_flag));
  img_flag_resized.copyTo(imageROI);
  //Step3:保存叠加后的图像
  imwrite(“new_head.jpg”,img_head);
  return 0;
  }
  其CmakeList.txt为:
  cmake_minimum_required(VERSION 3.0)
  project(07_National_Flag)
  find_package(OpenCV REQUIRED)
  add_executable(07_National_Flag main.cpp)
  target_link_libraries(07_National_Flag ${OpenCV_LIBS})
2020-11-11 14:45:53 评论

举报

只有小组成员才能发言,加入小组>>

322个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表