旋转图片,空余部分补黑色,并将原坐标转换

#载入必要的模块
import os
from PIL import Image
from PIL import ImageDraw
import sys
import xlrd
import numpy
import math
import xlsxwriter

#输入
ExcelFile=xlrd.open_workbook(r‘.\标记信息.xlsx‘)
sheet=ExcelFile.sheet_by_index(0)
#输出
workbook = xlsxwriter.Workbook(‘./new/旋转后的标记信息.xlsx‘) #创建工作簿
worksheet = workbook.add_worksheet() #创建工作表

print(sheet.nrows)

for i in range(0,sheet.nrows):
    videoid=str(int(sheet.cell_value(i,0)))
    frameid=str(int(sheet.cell_value(i,1)))
    x1=int(sheet.cell_value(i,2))
    x2=int(sheet.cell_value(i,4))
    x3=int(sheet.cell_value(i,6))
    x4=int(sheet.cell_value(i,8))
    y1=int(sheet.cell_value(i,3))
    y2=int(sheet.cell_value(i,5))
    y3=int(sheet.cell_value(i,7))
    y4=int(sheet.cell_value(i,9))
    bookname=sheet.cell_value(i,10)

    #print([x1,y1,x2,y2,x4,y4,x3,y3,x1,y1])

    pic_fole_head =  Image.open(videoid+"_"+frameid+".jpg")
    width,height=pic_fole_head.size
    #print([width,height])

    #计算余弦值
    cosa=(y3-y1)/numpy.sqrt(numpy.power(x1-x3,2)+numpy.power(y1-y3,2))
    #计算需要选装的弧度
    rad=numpy.abs(numpy.arccos(cosa))
    #计算需要旋转的角度
    alpha=rad*180/math.pi
    #判断旋转的方向
    #并且计算旋转后的坐标
    if x3<x1:
        pic_fole_head=pic_fole_head.rotate(alpha,0,1)
        yy1=y1*numpy.cos(rad)+(width-x1)*numpy.sin(rad)
        xx1=x1*numpy.cos(rad)+y1*numpy.sin(rad)
        yy2=y2*numpy.cos(rad)+(width-x2)*numpy.sin(rad)
        xx2=x2*numpy.cos(rad)+y1*numpy.sin(rad)
        yy3=y3*numpy.cos(rad)+(width-x3)*numpy.sin(rad)
        xx3=x3*numpy.cos(rad)+y3*numpy.sin(rad)
        yy4=y4*numpy.cos(rad)+(width-x4)*numpy.sin(rad)
        xx4=x4*numpy.cos(rad)+y4*numpy.sin(rad)
    else:
        alpha=-alpha
        pic_fole_head=pic_fole_head.rotate(alpha,0,1)
        yy1=y1*numpy.cos(rad)+x1*numpy.sin(rad)
        xx1=x1*numpy.cos(rad)+(height-y1)*numpy.sin(rad)
        yy2=y2*numpy.cos(rad)+x2*numpy.sin(rad)
        xx2=x2*numpy.cos(rad)+(height-y2)*numpy.sin(rad)
        yy3=y3*numpy.cos(rad)+x3*numpy.sin(rad)
        xx3=x3*numpy.cos(rad)+(height-y3)*numpy.sin(rad)
        yy4=y4*numpy.cos(rad)+x4*numpy.sin(rad)
        xx4=x4*numpy.cos(rad)+(height-y4)*numpy.sin(rad)

    #print([xx1,yy1,xx2,yy2,xx4,yy4,xx3,yy3,xx1,yy1])
    #框出旋转后的书名,测试时用来验证
    #drawObject=ImageDraw.Draw(pic_fole_head)
    #drawObject.line([xx1,yy1,xx2,yy2,xx4,yy4,xx3,yy3,xx1,yy1],(0,5,255),5)

    #保存新结果
    worksheet.write(i, 0, int(videoid))
    worksheet.write(i, 1, int(frameid))
    worksheet.write(i, 2, int(xx1))
    worksheet.write(i, 3, int(yy1))
    worksheet.write(i, 4, int(xx2))
    worksheet.write(i, 5, int(yy2))
    worksheet.write(i, 6, int(xx3))
    worksheet.write(i, 7, int(yy3))
    worksheet.write(i, 8, int(xx4))
    worksheet.write(i, 9, int(yy4))
    worksheet.write(i, 10, bookname)
    worksheet.write(i, 11, videoid+"_"+frameid+"_"+str(i+1)+".png")
    #pic_fole_head.show()

    pic_fole_head.save("./new/"+videoid+"_"+frameid+"_"+str(i+1)+".jpg")
workbook.close()

本程序目的是:将标记的书名放到垂直方向

载入xlsx的部分因人而异,可以只看循环体中转换的步骤,坐标的转换是一个简单的几何关系。

最终的效果如下:

》》》》

原文地址:https://www.cnblogs.com/littleby/p/9770949.html

时间: 2024-10-23 05:10:41

旋转图片,空余部分补黑色,并将原坐标转换的相关文章

Camera图片特效处理综述(Bitmap的Pixels处理、Canvas/paint的drawBitmap处理、旋转图片、裁截图片、播放幻灯片浏览图片&lt;线程固定时间显示一张&gt;)

一种是直接对Bitmap的像素进行操作,如:叠加.边框.怀旧.(高斯)模糊.锐化(拉普拉斯变换). Bitmap.getPixels(srcPixels, 0, width, 0, 0, width, height); newR = (int) (pixR * alpha + layR * (1 - alpha));    newR = Math.min(255, Math.max(0, newR));    ...    srcPixels[pos] = Color.argb(newA, ne

旋转图片

旋转图片 by 伍雪颖 - (void)startAnimation { CABasicAnimation* rotationAnimation; rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 ]; rotationAnimation

CSS旋转图片

1.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C

js旋转图片的功能

最近突然想研究一下js旋转图片的功能.对于之前的实现方式,就不先说了.现在HTML5很不错,主要了解一下HTML5中的图片旋转吧. 实例演示:  http://www.imqing.com/demo/rotateImg.html 原理:利用canvas对象来旋转. 实现方式:首先创建一个canvas元素,然后把img元素绘入canvas.但是,实际上,这是默认情况,就是图片没旋转时.如果图片要旋转90度的话,就需要先把canvas画布旋转90度后再绘图. 描述如下: (内部旋转原理是这样的,图片

ios新手开发——toast提示和旋转图片加载框

不知不觉自学ios已经四个月了,从OC语法到app开发,过程虽然枯燥无味,但是结果还是挺有成就感的,在此分享我的ios开发之路中的小小心得~废话不多说,先上我们今天要实现的效果图: 有过一点做APP经验的都知道,提示框和等待加载框一直是APP首当其中的效果,ios不像android一样,自带toast和progressbarDialog,所以在做ios开发的时候,我首先想到了先封装这两个基础控件~当然网上的资源数不胜数,但是博主抱着一颗自主研究的精神,做出的效果也不错,也已适配了所有iphone

360度旋转图片小特效

现在,在这个网络发达的时代,一些电子商务公司,需要将自己线上的产品给买家或用户看,为了能让用户了解的更全面,那么把一个物件的产品要展示到方方面面,就要运用到360度旋转图片特效,因为上次有朋友叫我帮她弄这样一个效果,然后结合网上的资源,就小试牛刀了,觉得还挺好玩的,效果还是可以看的吧. 首先呢,需要在HTML文档中引入3deye.min.js文件和jq.js,这些可以在网上下载到免费的,另外,要展示到方方面面的,就要做这件物品的各个角度的图片,我这里是36张图片,每10度一张图片,好了,我就贴出

旋转图片,增加神经网络的准确率

前面我们用全量mnist数据集测试的准确率大概在75%左右,当然是没有经过改进之前的测试. 而我们用少量mnist数据集测试的准确率只有60%左右.两个的区别在于mnist训练数据集的大小,如果我们在全量数据集的基础上在增加新的图片会不会提高准确率呢.下面我们试下通过旋转已知图片的方法看准确率是否有增加. 1.训练 在训练的过程中旋转图片,再训练新的图片. inputs_plusx_img = scipy.ndimage.interpolation.rotate(input_list.resha

css3 3d旋转图片立方体特效代码

一.什么是css3 3d旋转 ? 形成一个3D空间: transform-style:preserve-3d    ( 让父元素形成3D,让其子元素在3D空间进行变化 ). 3d场景,在垂直于屏幕的方法,相对于3d多出个z轴,Z轴:靠近屏幕的方向是正向,远离屏幕的方向是反向,2d场景,在屏幕上水平和垂直的交叉线x轴和y轴. 二.关于css 3d旋转的相关属性及使用方法 变形属性:transform 3D功能函数 ----3D的位移:transform:translate3d(x,y,z);   

修正《更简单的 编辑器从光标处插入图片(失去焦点后仍然可以在原位置插入)》中的一个问题

转载请注明: TheViper http://www.cnblogs.com/TheViper  以前写过一篇更简单的 编辑器从光标处插入图片(失去焦点后仍然可以在原位置插入),里面只测试了ie,事实上在firefox中有个小问题,就是不管插入图片前,编辑器有没有焦点(光标),在插入后,光标会消失. 插入前没有焦点 插入前有焦点 修正 function insertImage(html){ restoreSelection(); if(document.selection) currentRan