制作编程五福卡图片的过程可以分为以下几个步骤:
获取“福”字图片
首先,你需要一张大大的“福”字图片作为基础。
灰度图
将彩色RGB三通道图像转化为单通道的灰色图像。可以使用OpenCV的`cvtColor`函数,代码如下:
```python
gray_img = cv2.cvtColor(self.ori_img, cv2.COLOR_BGR2GRAY)
```
轮廓图
对灰度图像进行滤波处理去除噪声,然后检测边缘。可以使用OpenCV的`Canny`函数,代码如下:
```python
img = cv2.cvtColor(self.ori_img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(img, threshold1, threshold2)
```
反色图
用255减去原图中的每一个像素值,得到反色图。代码如下:
```python
def inverse_color(self, img):
return 255 - img
```
腐蚀图
对红色(背景)进行膨胀,对黑色(福字)进行腐蚀。这也是OpenCV的内置功能,代码如下:
```python
kernel = np.ones((3, 3), np.uint8)
erosion = cv2.erode(gray_img, kernel, iterations=1)
```
旋转图
将福字进行旋转。可以使用OpenCV的`warpAffine`函数,代码如下:
```python
(h, w) = img.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(img, M, (w, h))
```
交互界面
使用Tkinter制作交互界面,包括按钮控件、下拉菜单控件和Entry控件,让用户选择效果和输入名字。代码如下:
```python
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("编程五福卡生成器")
创建按钮
btn_gray = ttk.Button(root, text="生成灰度图", command=self.Gray_fu)
btn_gray.grid(row=0, column=0)
创建下拉菜单
var = tk.StringVar(root)
var.set("效果1")
options = ["效果1", "效果2", "效果3", "效果4", "效果5"]
combo = ttk.Combobox(root, textvariable=var, values=options)
combo.grid(row=0, column=1)
创建输入框
entry = ttk.Entry(root)
entry.grid(row=1, column=0, columnspan=2)
创建按钮
btn_save = ttk.Button(root, text="保存图片", command=self.save_image)
btn_save.grid(row=2, column=0, columnspan=2)
root.mainloop()
```
效果合成
读取福字图片和图标,调整大小,创建ImageDraw对象,将姓名和图标粘贴到福字上,最后保存到本地。代码如下: