谁选的我不多说,懂的都懂。
昨天因为我python的环境有些冲突,很多都没有跑起来,今天折腾半天,最后用conda建立虚拟环境,大部分都可以了,我把昨天应该写的补上,应该做完今天的就差不多没了。
颜值打分
这个做了挺久的,半抄半写,效果不算好,我认为应该是越白分数越高,我也不清楚opencv这个模型是拿什么练的,测了一下,彭于晏没pzm帅😋
代码实现,要有一个文件叫haarcascade_frontalface_default.xml,训练模型,这个应该是在opencv里有。
需要的库有:ybc_face,numpy,opencv,tkinter
import cv2
import ybc_face as face
import numpy
import tkinter as tk
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
img = cv2.imread('img/jcw.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
print(faces)
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),5)
cv2.imwrite('result.png',img)
res = face.info('result.png')
imageLabel_win = tk.Tk()
photo = tk.PhotoImage(file='result.png')
imageLabel_win = tk.Label(imageLabel_win,image=photo)
imageLabel_win.pack(side=tk.LEFT)
imageLabel_win.mainloop()
print(res)
图片油画效果
还是opencv,opencv真图像处理界の绝对王者
这个模糊程度得自行根据图片的清晰程度调整,直接照抄不好使。
import cv2
img = cv2.imread('5.png')#这里填你所选用的图片
res = cv2.xphoto.oilPainting(img, 4, 1) # 4往上就是越来越模糊,往下就是越来越清晰.
#cv2.imshow('result', res)
cv2.imwrite('result1.jpg',res)
cv2.waitKey(0)
文字填充图片像素
就是把图片里的像素用文字覆盖,改自b站一位up的项目,原项目地址。
主要是把import那一块改了,我觉得没啥必要这样写,直接import更方便,当然那位up可能是为了方便纯路人。
文件切记不能太大,否则动辄几十上百兆。
import sys
import cv2
from PIL import Image, ImageDraw, ImageFont
CHILD_W = CHILD_H = 16 # 子图的尺寸,宽和高都是16像素
txt = '我惠美如画中仙' # 输出内容
font = ImageFont.truetype('AliPuHui-Bold.ttf', CHILD_W) # 字体及大小,选用粗体字体效果更好
# 程序入口
if __name__ == '__main__':
imgSrc = Image.open(sys.argv[1]) # 打开源图像
w, h = imgSrc.size # 源图像宽和高
imgChild = Image.new("RGB", (CHILD_W, CHILD_H)) # 新建子图
imgDst = Image.new("RGB", (CHILD_W*w, CHILD_H*h) ) # 创建目标图像的空图,待填充
textW, textH = font.getsize("迷") # 取得单个文字的宽、高信息
offsetX = (CHILD_W - textW) >> 1 # 文字水平居中绘制
offsetY = (CHILD_H - textH) >> 1 # 文字垂直居中绘制
charIndex = 0 # 序号,代表当前绘制哪个汉字
draw = ImageDraw.Draw(imgChild) # 取得小图的绘图对象,用于绘制文字
print("开始处理图片...")
for y in range(h):
for x in range(w):
draw.rectangle( (0, 0, CHILD_W, CHILD_H), fill = 'lightgray' ) # 灰色背景效果比外色略好
draw.text( (offsetX, offsetY), txt[charIndex], font = font, fill = imgSrc.getpixel((x, y)) )
imgDst.paste(imgChild, (x*CHILD_W, y*CHILD_H)) # 把绘制好的子图填到imgDst里
charIndex += 1 # 序号加1,从而依次绘制每个字
if charIndex == len(txt): # 循环绘制
charIndex = 0
imgDst.save(sys.argv[2]) # 保存图片
猜数游戏
python写累了,写个rust。
use std::io;
use rand::Rng;
use std::cmp::Ordering;
fn main() {
println!("Guess a number!");
let secret_number = rand::thread_rng().gen_range(1,100);
println!("The number is {}",secret_number);
loop{
let mut guess = String::new();
io::stdin().read_line(&mut guess).expect("Can't read");
println!("The number that you write is : {}",guess);
let guess:u32 = match guess.trim().parse(){
Ok(num) => num,
Err(_) => continue,
};
:
matc Eguess.cmp(&secret_number){
Ordering::Less => println!("Too small!!"),
Ordering::Greater => println!("Too big"),
Ordering::Equal => {
println!("You win!");
break;
}
}
}
}
随机给一个数(1~100),然后让你凭空猜,上的rust课里有讲这个,没什么好写了就放出来了。