免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5965 | 回复: 2
打印 上一主题 下一主题

贴些图片处理的代码 [复制链接]

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-27 00:48 |只看该作者 |倒序浏览
好久没来CU贴代码了  贴一段  买了相机后  一直写给自己用的

呵呵  用的最多的 还是批量加水印


  1. #!/usr/bin/env python
  2. #-*- coding:UTF-8 -*-

  3. #****************************
  4. #  Author: ghostwwl
  5. #  Email: [email]ghostwwl@gmail.com[/email]
  6. #  License: GPL
  7. #****************************

  8. import os
  9. import sys
  10. import Image
  11. import ImageDraw
  12. import ImageFont
  13. from opencv.cv import *
  14. from opencv.highgui import *
  15. import win32ui, win32con

  16. logo = os.path.join(os.path.dirname(sys.argv[0]), 'logo.jpg')

  17. def mImageROI(infile, outfile, zoom, point, width, height):
  18.     '''
  19.     zoom:缩放倍数
  20.     infile:原始文件
  21.     outfile:处理生成的文件
  22.     point 起始点坐标
  23.     width, height: 截取区域的宽高
  24.     '''
  25.     try:
  26.         if not os.path.exists(infile):
  27.             return "No infile!"
  28.         im = cvLoadImage(infile, 1)
  29.         cw, ch = int(im.width*zoom), int(im.height*zoom)
  30.         fm = cvCreateImage(cvSize(cw, ch), im.depth, im.nChannels)
  31.         cvSetZero(fm)
  32.         del cw,ch
  33.         cvResize(im, fm)
  34.         cv.cvRelease(im)
  35.         del im
  36.         om = cvCreateImage(cvSize(int(point[0] + width),
  37.             int(point[1] + height)), fm.depth, fm.nChannels)
  38.         cvSetZero(om)
  39.         rcenter = cvPoint2D32f(px1 + width/2.0, py1 + height/2.0)
  40.         cvGetRectSubPix(fm, om, rcenter)
  41.         del rcenter
  42.         cvSaveImage(outfile, om)
  43.         cv.cvReleaseImage(fm)
  44.         del fm
  45.         cv.cvReleaseImage(om)
  46.         del om  
  47.         print "ok"
  48.     except Exception, e:
  49.         return "ROI Error: %s" % str(e)

  50. def fupian(infile, outfile):
  51.     def base_1(data1,data2):
  52.         x1, y1 = data1
  53.         x2, y2 = data2
  54.         x1, x2, y1, y2 = float(x1), float(x2), float(y1), float(y2)
  55.         a = (y2 - y1)/(x2 * x2 - x1 * x1)
  56.         b = y1 - a * x1 * x1
  57.         return a, b

  58.     def base_2(i, points):
  59.         points_length = len(points)
  60.         for j in range(points_length):
  61.             now_point = points[j]
  62.             next_point = points[j+1]
  63.             x1, x2 = now_point[0],next_point[0]
  64.             if x1 <= i <= x2:
  65.                 a, b = base_1(now_point, next_point)
  66.                 return a * i * i + b
  67.    
  68.     def smoonth(i):
  69.         points=[(0, 0), (73, 47), (179, 213), (255, 255)]
  70.         return base_2(i, points)
  71.             
  72.     def smoonth_r(i):
  73.         points=[(0, 0), (91, 22), (192, 149), (255, 232)]
  74.         return base_2(i, points)
  75.    
  76.     def smoonth_g(i):
  77.         points=[(0, 21), (70, 90), (189, 151), (255, 212)]
  78.         return base_2(i,points)
  79.    
  80.     def smoonth_b(i):
  81.         points=[(0, 2), (45, 68), (205, 147), (255, 255)]
  82.         return base_2(i,points)
  83.    
  84.     try:
  85.         im = Image.open(infile)
  86.         R, G, B = im.split()
  87.         R = R.point(smoonth_r)
  88.         G = G.point(smoonth_g)
  89.         B = B.point(smoonth_b)
  90.         new = Image.merge('RGB', (R, G, B))
  91.         new = new.point(smoonth)
  92.         new.save(outfile)
  93.     except Exception, e:
  94.         print str(e)

  95. def WaterMark(fil, dh='y'):
  96.     '''
  97.     第一个参数是 图片的完整路径
  98.     第二个参数表示是否对logo图像进行透明处理
  99.     PIL简单 就PIL OpenCV虽然速度快 写起来也多要好多行啊
  100.     '''
  101.     img1 = Image.open(fil).convert("RGB")
  102.     logoimg = Image.open(logo).convert("RGBA")
  103.    
  104.     #这里是针对
  105.     w2 = (img1.size[0] - 10)/5
  106.     h2 = w2*logoimg.size[1]/logoimg.size[0]
  107.     logoimg = logoimg.resize((w2, h2), Image.ANTIALIAS)
  108.    
  109.     #在属主图像中生成嵌入图像大小的box
  110.     box = (img1.size[0] - w2 - 20, img1.size[1] - h2 - 20)
  111.     if 'y' in dh:
  112.         Mask = logoimg.convert("L").point(lambda x: min(x, 100))
  113.         logoimg.putalpha(Mask)
  114.     img1.paste(logoimg, box, logoimg)
  115.     img1.save(fil.split(".")[0]+"_W.jpg")

  116. #--------------------------------------------------------------
  117. def WriteText(im, text = None, align = 0):
  118.     '''
  119.     align 表示对齐方式 1 为右下脚 0 为底部居中
  120.     text 表示要写到图片上的文字
  121.     如果需要在linux下用把请修改字体路径和字体,
  122.     然后确保安装了python和pil模块
  123.    
  124.     这里没有用OpenCV是因为 官方库 暂时不支持中文
  125.     如果要用中文  就要C++ 用国内爱好这开发的 第三方扩展了
  126.     所以 直接PIL了
  127.     '''
  128.     if not text:
  129.         text = 'Email:ghostwwl@gmail.com'   
  130.    
  131.     img = Image.open(im).convert("RGB")
  132.     Draw = ImageDraw.ImageDraw(img, "RGBA")
  133.    
  134.     #自动调整字体大小
  135.     size = 0
  136.     while True:
  137.         size += 1
  138.         #如果在linux下 请去/usr/share/fonts下找个truetype吧 支持中文的字体
  139.         font = ImageFont.truetype("C:\\Windows\\Fonts\\STXINWEI.TTF", size)
  140.         tw, th = font.getsize(text)
  141.         if tw > img.size[0]/5:
  142.             break
  143.     if align == 1:
  144.         w1 = (img.size[0] - tw)/2
  145.     else:
  146.         w1 = img.size[0]*0.78
  147.     h1 = img.size[1] - th -  10
  148.    
  149.     Draw.setfont(font)
  150.     Draw.text((w1, h1), unicode(text, "utf-8"))
  151.     img.save(im.split(".")[0]+"_Text.jpg")

  152. #--------------------------------------------------------------
  153. def GetFiles():
  154.     openflag = "JPEG File (*.jpg)|*.jpg|ALL File (*.*)|*.*|"
  155.     filedialog = win32ui.CreateFileDialog(1, None, None, win32con.OFN_ALLOWMULTISELECT|win32con.OFN_HIDEREADONLY, openflag)
  156.     filedialog.SetOFNTitle("Select files to Work")
  157.     filedialog.DoModal()
  158.    
  159.     return filedialog.GetPathNames()

  160. if __name__ == '__main__':
  161.     #这里需要那些函数  自己改写  还有的东西没加进来
  162.     #会继续完善 想加入 人脸库 从海量照片中快速定位 包含自己的照片  和包含人脸的照片
  163.     #有时间  就写一点  一点点的爬啊
  164. #    f = GetFiles()
  165.     import glob
  166.     import time
  167.     pw = raw_input("Enter The JPEG File Path:")
  168.     fs = glob.glob(os.path.join(pw, '*.jpg'))
  169.     for i in fs:
  170. #        WriteText(i)
  171.         if not i.endswith('W.jpg') or not i.endswith('W.JPG'):
  172.             WaterMark(i)
  173.             print "%s Water Img: %s OK!" % (time.strftime("[%Y-%m-%d %H:%M:%S]"), i)
复制代码

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
2 [报告]
发表于 2008-05-27 00:50 |只看该作者
说明下 那个产生负片下过的 那个函数是 google到的  然后改一点 封装成了一个fupian函数

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
3 [报告]
发表于 2008-05-27 00:58 |只看该作者
特别说明 使用OpenCV要特小心  因为图片内存区域 都是手动获取 和释放的

如果弄错 很容出现python虚拟机 直接 给你的down掉  错误是很严重

毕竟是C过来的库  小心用来着 功能是超牛X的视觉库
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP