1、职业照–蓝底照片转换为白底

import cv2
import numpy as np
img=cv2.imread('C:/Users/Desktop/1.jpg') #原始图片
#缩放
rows,cols,channels = img.shape
img=cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
cv2.imshow('img',img)
#转换hsv
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_blue=np.array([78,43,46])
upper_blue=np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
#cv2.imshow('Mask', mask)
#腐蚀膨胀
erode=cv2.erode(mask,None,iterations=1)
#cv2.imshow('erode',erode)
dilate=cv2.dilate(erode,None,iterations=1)
#cv2.imshow('dilate',dilate)
#遍历替换
for i in range(rows):for j in range(cols):if dilate[i,j]==255:# img[i,j]=(255,255,255)#此处替换颜色,为BGR通道 白底img[i, j] = (0, 0, 255)  # 此处替换颜色,为BGR通道 红底
cv2.imwrite('C:/Users/Desktop/red.jpg',img) #生成的新图片
cv2.waitKey(0)
cv2.destroyAllWindows()

2、将bmp格式的图片批量转成jpg

# 功能描述: 将bmp格式的图片批量转成jpg
# 注意:路径不能包含中文格式import os
import cv2
# 图片的路径
bmp_dir = 'C:/Users/Desktop/Data'
jpg_dir = 'C:/Users/Desktop/Data1'filelists = os.listdir(bmp_dir)for i,file in enumerate(filelists):# 读图,-1为不改变图片格式,0为灰度图img = cv2.imread(os.path.join(bmp_dir,file),-1)newName = file.replace('.bmp','.jpg')cv2.imwrite(os.path.join(jpg_dir,newName),img)print('第%d张图:%s'%(i+1,newName))

3、将批量图片合成一段视频

import os
import cv2
file_dir='E:/project_python/opencv_python/pic1/'
list=[]
for root,dirs,files in os.walk(file_dir):for file in files:list.append(file)  #获取目录下文件名列表video=cv2.VideoWriter('E:/project_python/opencv_python/pic1/test.avi',cv2.VideoWriter_fourcc(*'MJPG'),10,(1280,720))  #定义保存视频目录名称及压缩格式,fps=10,像素为1280*720
for i in range(1,len(list)):img=cv2.imread('E:/project_python/opencv_python/pic1/'+list[i-1])  #读取图片img=cv2.resize(img,(1280,720)) #将图片转换为1280*720video.write(img)   #写入视频video.release()

4、将一段视频处理成批量图片

import cv2
mp4 = cv2.VideoCapture("video.mp4")  # 读取视频
is_opened = mp4.isOpened()  # 判断是否打开
print(is_opened)
fps = mp4.get(cv2.CAP_PROP_FPS)  # 获取视频的帧率
print(fps)
widght = mp4.get(cv2.CAP_PROP_FRAME_WIDTH)  # 获取视频的宽度
height = mp4.get(cv2.CAP_PROP_FRAME_HEIGHT)  # 获取视频的高度
print(str(widght) + "x" + str(height))
i = 0
while is_opened:if i == 13:  # 截取前15张图片breakelse:i += 1(flag, frame) = mp4.read()  # 读取图片file_name = "iamge" + str(i) + ".jpg"print(file_name)if flag == True:cv2.imwrite(file_name, frame, [cv2.IMWRITE_JPEG_QUALITY])  # 保存图片
print("转换完成")

5、两张图片叠加放在一起,调整透明度

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img1= cv.imread('C:/Users/Desktop/1.jpg')
img2= cv.imread('C:/Users/Desktop/2.jpg')dst = cv.addWeighted(img1,0.62,img2,0.38,0)cv.imshow('new_pic',dst)
cv.waitKey(0)
cv.destroyAllWindows()

6、数据增强

# -*- coding:utf-8 -*-
"""数据增强1. 翻转变换 flip2. 随机修剪 random crop3. 色彩抖动 color jittering4. 平移变换 shift5. 尺度变换 scale6. 对比度变换 contrast7. 噪声扰动 noise8. 旋转变换/反射变换 Rotation/reflection
"""from PIL import Image, ImageEnhance, ImageOps, ImageFile
import numpy as np
import random
import threading, os, time
import logginglogger = logging.getLogger(__name__)
ImageFile.LOAD_TRUNCATED_IMAGES = Trueclass DataAugmentation:"""包含数据增强的八种方式"""def __init__(self):pass@staticmethoddef openImage(image):return Image.open(image, mode="r")@staticmethoddef randomRotation(image, mode=Image.BICUBIC):"""对图像进行随机任意角度(0~360度)旋转:param mode 邻近插值,双线性插值,双三次B样条插值(default):param image PIL的图像image:return: 旋转转之后的图像"""random_angle = np.random.randint(1, 360)return image.rotate(random_angle, mode)@staticmethoddef randomCrop(image):"""对图像随意剪切,考虑到图像大小范围(68,68),使用一个一个大于(36*36)的窗口进行截图:param image: PIL的图像image:return: 剪切之后的图像"""image_width = image.size[0]image_height = image.size[1]crop_win_size = np.random.randint(40, 68)random_region = ((image_width - crop_win_size) >> 1, (image_height - crop_win_size) >> 1, (image_width + crop_win_size) >> 1,(image_height + crop_win_size) >> 1)return image.crop(random_region)@staticmethoddef randomColor(image):"""对图像进行颜色抖动:param image: PIL的图像image:return: 有颜色色差的图像image"""random_factor = np.random.randint(0, 31) / 10.  # 随机因子color_image = ImageEnhance.Color(image).enhance(random_factor)  # 调整图像的饱和度random_factor = np.random.randint(10, 21) / 10.  # 随机因子brightness_image = ImageEnhance.Brightness(color_image).enhance(random_factor)  # 调整图像的亮度random_factor = np.random.randint(10, 21) / 10.  # 随机因1子contrast_image = ImageEnhance.Contrast(brightness_image).enhance(random_factor)  # 调整图像对比度random_factor = np.random.randint(0, 31) / 10.  # 随机因子return ImageEnhance.Sharpness(contrast_image).enhance(random_factor)  # 调整图像锐度@staticmethoddef randomGaussian(image, mean=0.2, sigma=0.3):"""对图像进行高斯噪声处理:param image::return:"""def gaussianNoisy(im, mean=0.2, sigma=0.3):"""对图像做高斯噪音处理:param im: 单通道图像:param mean: 偏移量:param sigma: 标准差:return:"""for _i in range(len(im)):im[_i] += random.gauss(mean, sigma)return im# 将图像转化成数组img = np.asarray(image)img.flags.writeable = True  # 将数组改为读写模式width, height = img.shape[:2]img_r = gaussianNoisy(img[:, :, 0].flatten(), mean, sigma)img_g = gaussianNoisy(img[:, :, 1].flatten(), mean, sigma)img_b = gaussianNoisy(img[:, :, 2].flatten(), mean, sigma)img[:, :, 0] = img_r.reshape([width, height])img[:, :, 1] = img_g.reshape([width, height])img[:, :, 2] = img_b.reshape([width, height])return Image.fromarray(np.uint8(img))@staticmethoddef saveImage(image, path):image.save(path)def makeDir(path):try:if not os.path.exists(path):if not os.path.isfile(path):# os.mkdir(path)os.makedirs(path)return 0else:return 1# except Exception, e:except Exception as e:print(str(e))return -2def imageOps(func_name, image, des_path, file_name, times=5):funcMap = {"randomRotation": DataAugmentation.randomRotation,"randomCrop": DataAugmentation.randomCrop,"randomColor": DataAugmentation.randomColor,"randomGaussian": DataAugmentation.randomGaussian}if funcMap.get(func_name) is None:logger.error("%s is not exist", func_name)return -1for _i in range(0, times, 1):new_image = funcMap[func_name](image)DataAugmentation.saveImage(new_image, os.path.join(des_path, func_name + str(_i) + file_name))opsList = {"randomRotation", "randomCrop", "randomColor", "randomGaussian"}def threadOPS(path, new_path):"""多线程处理事务:param src_path: 资源文件:param des_path: 目的地文件:return:"""if os.path.isdir(path):img_names = os.listdir(path)print("------------------")else:img_names = [path]img_names = os.listdir(path)print("==================")for img_name in img_names:print(img_name)tmp_img_name = os.path.join(path, img_name)print("+++++++++++++++++++++++++++++++++++++++++++++++++++++")print(tmp_img_name)print(tmp_img_name.split('.'))if os.path.isdir(tmp_img_name):if makeDir(os.path.join(new_path, img_name)) != -1:threadOPS(tmp_img_name, os.path.join(new_path, img_name))else:print('create new dir failure')return -1# os.removedirs(tmp_img_name)elif tmp_img_name.split('.')[1] != "DS_Store":# 读取文件并进行操作image = DataAugmentation.openImage(tmp_img_name)threadImage = [0] * 5_index = 0for ops_name in opsList:threadImage[_index] = threading.Thread(target=imageOps,args=(ops_name, image, new_path, img_name,))threadImage[_index].start()_index += 1time.sleep(0.2)if __name__ == '__main__':threadOPS("C:/Users/Desktop/Data1", "C:/Users/out_img1")

7、画图

画图一
import numpy as np
import cv2 as cv
# 创建一个黑色的图像
img = np.zeros((512,512,3), np.uint8)
# 画一条 5px 宽的蓝色对角线
cv.line(img,(0,0),(511,511),(255,0,0),5)
#画矩形
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
#画圆
cv.circle(img,(447,63), 63, (0,0,255), -1)
#画多边形
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255))
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()画图二
import numpy as np
import cv2 as cv
# 鼠标回调函数
def draw_circle(event,x,y,flags,param):if event == cv.EVENT_LBUTTONDBLCLK:cv.circle(img,(x,y),100,(255,0,0),-1)
# 创建一个黑色图像,一个窗口,然后和回调绑定
img = np.zeros((512,512,3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):cv.imshow('image',img)if cv.waitKey(20) & 0xFF == 27:break
cv.destroyAllWindows()画图三
import numpy as np
import cv2 as cv
drawing = False # 如果 True 是鼠标按下
mode = True # 如果 True,画矩形,按下‘m’切换到曲线
ix,iy = -1,-1
# 鼠标回调函数
def draw_circle(event,x,y,flags,param):global ix,iy,drawing,modeif event == cv.EVENT_LBUTTONDOWN:drawing = Trueix,iy = x,yelif event == cv.EVENT_MOUSEMOVE:if drawing == True:if mode == True:cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)else:cv.circle(img,(x,y),5,(0,0,255),-1)elif event == cv.EVENT_LBUTTONUP:drawing = Falseif mode == True:cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)else:cv.circle(img,(x,y),5,(0,0,255),-1)img = np.zeros((512,512,3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):cv.imshow('image',img)k = cv.waitKey(1) & 0xFFif k == ord('m'):mode = not modeelif k == 27:break
cv.destroyAllWindows()
画图四
import numpy as np
import cv2 as cv
def nothing(x):pass
# 创建一个黑色图像,一个窗口
img = np.zeros((300,512,3), np.uint8)
cv.namedWindow('image')
# 创建一个改变颜色的轨迹栏
cv.createTrackbar('R','image',0,255,nothing)
cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)
# 创建一个开关用来启用和关闭功能的
switch = '0 : OFF \n1 : ON'
cv.createTrackbar(switch, 'image',0,1,nothing)
while(1):cv.imshow('image',img)k = cv.waitKey(1) & 0xFFif k == 27:break# get current positions of four trackbarsr = cv.getTrackbarPos('R','image')g = cv.getTrackbarPos('G','image')b = cv.getTrackbarPos('B','image')s = cv.getTrackbarPos(switch,'image')if s == 0:img[:] = 0else:img[:] = [b,g,r]
cv.destroyAllWindows()
画图五
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
BLUE = [255,0,0]
img1 = cv.imread('C:/Users/Desktop/1.jpg')
replicate = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_WRAP)
constant= cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()

职业照--蓝底照片转换为白底相关推荐

  1. 汇编笔记-在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串“welcome to masm!”

    ; 王爽-汇编语言-第9章 ; 完成目标:在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串"welcome to masm!" ; 其它需要知道的知识点: ; 1. 内存空间中, ...

  2. 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串 'welcome to masm!'...

    ; 编程:在屏幕中间分别显示绿色.绿底红色.白底蓝色的字符串 'welcome to masm!' assume cs:codesg , ds:datasg , ss:stacksg datasg s ...

  3. 如何用ps把照片变成白底

    工具:Adobe Photoshop CS6 第一步:打开需要把背景变成白底的图片. 第二步:按Ctrl+J键复制背景图层. 第三步:在左侧工具栏中选择"魔棒工具",单击选中背景区 ...

  4. 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'

    80*25彩色字符模式显示缓冲区的结构: 内存地址空间中,B8000H~BFFFFH共32KB的空间,为80*25彩色字符模式的显示缓冲区.向这个地址空间写入数据,写入的内容将立即出现在显示器上. 在 ...

  5. 使用Photoshop给照片添加白底和水印

    工具:Windows10.Photoshop 前言 Photoshop 通过脚本支持外部自动化.该脚本是利用 JavaScript 支持编写可以在 Windows上运行的 Photoshop 脚本.使 ...

  6. 文字图片白底黑字_白底黑字简短文字图片 白底黑字纯简短文字

    1.冰雪的灵魂,迷恋无价的约定,深深的爱.悲伤要喜悦,一片尘土,爱恨双方. 2.别笑,憨豆先生.让我为你哭泣. 3.我爱你,如果有一天我不爱你了,那一定是我离开了这个世界.<爱情维修站> ...

  7. 蓝底换白底边缘不干净_蓝底换白底【解决措施】

    虽然电脑已经很普遍了,但是一些年长的人对电脑的操作不是很熟悉,比如在使用win7系统时一旦遇到蓝底换白底 时就懵了,对于蓝底换白底 处理起来相对来说较简单,按照我们的步骤处理蓝底换白底 很容易上手,蓝 ...

  8. 怎样将蓝底照片换成白底

    方法:美图秀秀 + java程序. 原来的照片是这样的: 1. 先用美图秀秀将面积较大的蓝底以及边缘比较光滑的部分先刷成白色,或者抠出来都行. 2. 用java程序将边缘部分的蓝色调替换成白色,代码如 ...

  9. 教你用OpenCV 和 Python给证件照换底色(蓝底 -红底-白底)

    在我们的生活中常常要用到各种底色要求的证件电子照,红底.蓝底.或者白底,而假如你手上只有一种底色的证件照,你又不想再去拍又不会PS怎么办?今天教你们用OpenCV和Python给你的证件照换底色. P ...

最新文章

  1. javax.servlet.ServletException: Servlet[springmvc]的Servlet.init()引发异常
  2. ios手势识别-单击
  3. python字典一键多值_Python实现字典一个键对应多个值
  4. PC市场连续5年滑坡,但对惠普戴尔来说是好消息
  5. tomcat错误:The page you tried to access (/manager/login.do) does not exist
  6. latex 三线表_LaTeX学习记录(3):使用图表
  7. linux(Centos系统)部署项目(vue+nginx+tomcat)
  8. 第二章 IOC的配置使用 --《跟我学Spring》笔记 张开涛
  9. python爬虫毕业论文大纲参考模板_毕业论文大纲参考模板.docx
  10. 热带鱼屏保(Marine Aquarium 3),如何才能绕过它的Key Code?
  11. Pandas汇总不同excel工作簿中的表格并合并同类数据
  12. 第一章概述-------第一节--1.1计算机网络在信息时代中的作用
  13. 飞腾D20008核桌面处理器
  14. 奔驰c260语言设置方法图解,奔驰C260L灯光使用方法 C260L灯光开关图解说明
  15. 微软E5账号OneDrive无法扩容解决方案(亲测有效)
  16. c/c++面试官经常提的问题
  17. 老外名字中间的点怎么输入 微软拼音 @
  18. 卡尔曼滤波器、扩展卡尔曼滤波器、无向卡尔曼滤波器的详细推导
  19. 自定义resttemplate的ErrorHandler
  20. 6月20日打卡50个单词

热门文章

  1. folium基础内容介绍
  2. 时间序列的数据分析(七):数据平稳性
  3. UDAL - DBProxy internal error问题解决
  4. 大学生java 实训总结
  5. 《数据库系统概念》——关系数据库
  6. uboot启动之BL2阶段的分析1:宏观分析
  7. os.system和os.popen和commands
  8. 什么是虚拟机管理程序hypervisor,什么是hypervisor type 1, hypervisor type 2
  9. word/wps 插入图片变糊
  10. 再获认可!人大金仓金融信创优秀解决方案推进我国数字金融高质量发展