python如何移动图片_python之详细图像仿射变换讲解(图像平移、旋转、缩放、翻转),一文就够了,赶紧码住...

仿射变换简介

什么是放射变换

图像上的仿射变换, 其实就是图片中的一个像素点,通过某种变换,移动到另外一个地方。

从数学上来讲, 就是一个向量空间进行一次线形变换并加上平移向量, 从而变换到另外一个向量空间的过程。

向量空间m : m=(x,y)

向量空间n : n=(x′,y′)

向量空间从m到n的变换 n=A∗m+b

整理得到:

将A跟b 组合在一起就组成了仿射矩阵 M。 它的维度是2∗3

使用不同的矩阵M,就获得了不同的2D仿射变换效果。

在opencv中,实现2D仿射变换, 需要借助warpAffine 函数。

cv2.warpAffine(image, M, (image.shape[1], image.shape[0])

接下来,带你结合具体的2D仿射变换,分析其变换矩阵。

图像平移

公式推导

平移可以说是最简单的一种空间变换。其表达式为:

其中(b0,b1) 是偏移量。

例程

如果是向右平移10个像素, 向下平移30个像素的话, 那么变换矩阵M可以为:

演示代码

向右平移10个像素, 向下平移30个像素:

import cv2

import numpy as np

img = cv2.imread('lena1.jpg')

height,width,channel = img.shape

# 声明变换矩阵 向右平移10个像素, 向下平移30个像素

M = np.float32([[1, 0, 10], [0, 1, 30]])

# 进行2D 仿射变换

shifted = cv2.warpAffine(img, M, (width, height))

cv2.imwrite('shift_right_10_down_30.jpg', shifted)

原始图像:

向右平移10个像素, 向下平移30个像素图像:

向左平移10个像素, 向上平移30个像素:

# 声明变换矩阵 向左平移10个像素, 向上平移30个像素

M = np.float32([[1, 0, -10], [0, 1, -30]])

# 进行2D 仿射变换

shifted = cv2.warpAffine(img, M, (width, height))

cv2.imwrite('shift_right_-10_down_-30.jpg', shifted)

仿射变换图像:

图像平移v2

我们可以用translate这个函数把这个操作封装一下:

def translate(image, x, y):

M = np.float32([[1, 0, x], [0, 1, y]])

shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

return shifted

完成一些的代码:

import cv2

import numpy as np

img = cv2.imread('cat.png')

def translate(image, x, y):

M = np.float32([[1, 0, x], [0, 1, y]])

shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

return shifted

shifted = translate(img, 10, 30)

cv2.imwrite('shift_right_10_down_30.png', shifted)

处理结果同上。。。

图像旋转

利用getRotationMatrix2D实现旋转

opencv中getRotationMatrix2D函数可以直接帮我们生成M 而不需要我们在程序里计算三角函数:

getRotationMatrix2D(center, angle, scale)

参数解析center 旋转中心点 (cx, cy) 你可以随意指定

angle 旋转的角度 单位是角度 逆时针方向为正方向 , 角度为正值代表逆时针

scale 缩放倍数. 值等于1.0代表尺寸不变

该函数返回的就是仿射变换矩阵M

示例代码

import cv2

import numpy as np

# 获取旋转矩阵

rotateMatrix = cv2.getRotationMatrix2D((100, 200), 90, 1.0)

#设置numpy矩阵的打印格式

np.set_printoptions(precision=2,suppress=True)

print(rotateMatrix)

OUTPUT

[[ 0. 1. -100.]

[ -1. 0. 300.]]

为了使用方便, 你也可以封装一下旋转过程

def rotate(image, angle, center = None, scale = 1.0):

(h, w) = image.shape[:2]

if center is None:

center = (w / 2, h / 2)

M = cv2.getRotationMatrix2D(center, angle, scale)

rotated = cv2.warpAffine(image, M, (w, h))

return rotated

演示代码

# -*- coding: utf-8 -*-

'''

围绕原点处旋转 (图片左上角) 正方向为逆时针

利用getRotationMatrix2D函数生成仿射矩阵

'''

import numpy as np

import cv2

from math import cos,sin,radians

from matplotlib import pyplot as plt

img = cv2.imread('lena1.jpg')

height, width, channel = img.shape

# 求得图片中心点, 作为旋转的轴心

cx = int(width / 2)

cy = int(height / 2)

# 旋转的中心

center = (cx, cy)

new_dim = (width, height)

# 进行2D 仿射变换

# 围绕原点 逆时针旋转30度

M = cv2.getRotationMatrix2D(center=center,angle=30, scale=1.0)

rotated_30 = cv2.warpAffine(img, M, new_dim)

# 围绕原点 逆时针旋转30度

M = cv2.getRotationMatrix2D(center=center,angle=45, scale=1.0)

rotated_45 = cv2.warpAffine(img, M, new_dim)

# 围绕原点 逆时针旋转30度

M = cv2.getRotationMatrix2D(center=center,angle=60, scale=1.0)

rotated_60 = cv2.warpAffine(img, M, new_dim)

plt.subplot(221)

plt.title("Src Image")

plt.imshow(img[:,:,::-1])

plt.subplot(222)

plt.title("Rotated 30 Degree")

plt.imshow(rotated_30[:,:,::-1])

plt.subplot(223)

plt.title("Rotated 45 Degree")

plt.imshow(rotated_45[:,:,::-1])

plt.subplot(224)

plt.title("Rotated 60 Degree")

plt.imshow(rotated_60[:,:,::-1])

plt.show()

原始图形:

图像旋转图像(逆时针30度、45度、60度):

利用wrapAffine实现缩放

数学原理推导

围绕原点进行旋转

由此我们得出

所以对应的变换矩阵为

注意,这里我们进行公式推导的时候,参照的原点是在左下角, 而在OpenCV中图像的原点在图像的左上角, 所以我们在代码里面对theta取反。

我们可以利用math包中的三角函数。但是有一点需要注意 :三角函数输入的角度是弧度制而不是角度制。

我们需要使用radians(x) 函数, 将角度转变为弧度。

import math

math.radians(180)

3.141592653589793

代码演示

# -*- coding: utf-8 -*-

'''

围绕原点处旋转 (图片左上角) 正方向为逆时针

'''

import numpy as np

import cv2

import math

from matplotlib import pyplot as plt

img = cv2.imread('lena1.jpg')

height, width, channel = img.shape

def getRotationMatrix2D(theta):

# 角度值转换为弧度值

# 因为图像的左上角是原点 需要×-1

theta = math.radians(-1*theta)

M = np.float32([

[math.cos(theta), -math.sin(theta), 0],

[math.sin(theta), math.cos(theta), 0]])

return M

# 进行2D 仿射变换

# 围绕原点 顺时针旋转30度

M = getRotationMatrix2D(30)

rotated_30 = cv2.warpAffine(img, M, (width, height))

# 围绕原点 顺时针旋转45度

M = getRotationMatrix2D(45)

rotated_45 = cv2.warpAffine(img, M, (width, height))

# 围绕原点 顺时针旋转60度

M = getRotationMatrix2D(60)

rotated_60 = cv2.warpAffine(img, M, (width, height))

plt.subplot(221)

plt.title("Src Image")

plt.imshow(img[:,:,::-1])

plt.subplot(222)

plt.title("Rotated 30 Degree")

plt.imshow(rotated_30[:,:,::-1])

plt.subplot(223)

plt.title("Rotated 45 Degree")

plt.imshow(rotated_45[:,:,::-1])

plt.subplot(224)

plt.title("Rotated 60 Degree")

plt.imshow(rotated_60[:,:,::-1])

plt.show()

原始图像:

旋转之后演示图:

围绕任意点进行旋转

数学原理推导

那么如何围绕任意点进行旋转呢?

可以先把当前的旋转中心点平移到原点处, 在原点处旋转后再平移回去。

假定旋转中心为 (cx,cy)

其中

所以

代码演示

# -*- coding: utf-8 -*-

'''

围绕画面中的任意一点旋转

'''

import numpy as np

import cv2

from math import cos,sin,radians

from matplotlib import pyplot as plt

img = cv2.imread('lena1.jpg')

height, width, channel = img.shape

theta = 45

def getRotationMatrix2D(theta, cx=0, cy=0):

# 角度值转换为弧度值

# 因为图像的左上角是原点 需要×-1

theta = radians(-1 * theta)

M = np.float32([

[cos(theta), -sin(theta), (1-cos(theta))*cx + sin(theta)*cy],

[sin(theta), cos(theta), -sin(theta)*cx + (1-cos(theta))*cy]])

return M

# 求得图片中心点, 作为旋转的轴心

cx = int(width / 2)

cy = int(height / 2)

# 进行2D 仿射变换

# 围绕原点 逆时针旋转30度

M = getRotationMatrix2D(30, cx=cx, cy=cy)

rotated_30 = cv2.warpAffine(img, M, (width, height))

# 围绕原点 逆时针旋转45度

M = getRotationMatrix2D(45, cx=cx, cy=cy)

rotated_45 = cv2.warpAffine(img, M, (width, height))

# 围绕原点 逆时针旋转60度

M = getRotationMatrix2D(60, cx=cx, cy=cy)

rotated_60 = cv2.warpAffine(img, M, (width, height))

plt.subplot(221)

plt.title("Src Image")

plt.imshow(img[:,:,::-1])

plt.subplot(222)

plt.title("Rotated 30 Degree")

plt.imshow(rotated_30[:,:,::-1])

plt.subplot(223)

plt.title("Rotated 45 Degree")

plt.imshow(rotated_45[:,:,::-1])

plt.subplot(224)

plt.title("Rotated 60 Degree")

plt.imshow(rotated_60[:,:,::-1])

plt.show()

旋转效果:

围绕图片中心点旋转30度至60度

图像缩放

利用resize函数实现缩放

opencv其实有专门进行图像缩放的函数resize。

resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) -> dst

参数解析src 输入图片

dsize 输出图片的尺寸

dst 输出图片

fx x轴的缩放因子

fy y轴的缩放因子

interpolation 插值方式

INTER_NEAREST - 最近邻插值

INTER_LINEAR - 线性插值(默认)

INTER_AREA - 区域插值

INTER_CUBIC - 三次样条插值

INTER_LANCZOS4 - Lanczos插值

在使用的时候, 我们可以传入指定的图片的尺寸dsize

'''

使用resize函数对图像进行缩放

'''

import cv2

import numpy as np

img = cv2.imread('lena1.jpg')

height,width,channel = img.shape

# 声明新的维度

new_dimension = (400, 400)

# 指定新图片的维度与插值算法(interpolation)

resized = cv2.resize(img, new_dimension)

cv2.imwrite('lena_resize_400_400.png', resized)

原始图像:

缩放后的图像:

或者指定缩放因子fx,fy

将dsize 设置为 None, 然后指定fx fy

import cv2

import numpy as np

img = cv2.imread('lena1.jpg')

height,width,channel = img.shape

# 指定新图片的维度与插值算法(interpolation)

resized = cv2.resize(img, None, fx=1.5, fy=2)

cv2.imwrite('lena_resize_fx_fy.jpg', resized)

运行结果如下:

或者指定输出图片,并传入输出图片的size:

'''

根据fx跟fy进行图像缩放

'''

import cv2

import numpy as np

img = cv2.imread('lena1.jpg')

height,width,channel = img.shape

# 指定输出图片

dst = np.zeros((100, 100, 3), dtype='uint8')

# 指定新图片的维度与插值算法(interpolation)

cv2.resize(img, dst=dst, dsize=(dst.shape[1], dst.shape[0]), fx=1.5, fy=2)

cv2.imwrite('lena_resize_from_dst.jpg', dst)

运行结果如下:

为了方便使用, 我们也可以将其封装成函数

def resize(image, width = None, height = None, inter = cv2.INTER_AREA):

dim = None

(h, w) = image.shape[:2]

if width is None and height is None:

return image

if width is None:

r = height / float(h)

dim = (int(w * r), height)

if height is None:

r = width / float(w)

dim = (width, int(h * r))

if width and height:

dim = (width, height)

resized = cv2.resize(image, dim, interpolation = inter)

return resized

分辨率 从 5 * 5 放大到 1000 * 1000, 选择不同的插值算法,对应的演示效果:

'''

差值算法对比

'''

import cv2

import numpy as np

from matplotlib import pyplot as plt

img = np.uint8(np.random.randint(0,255,size=(5,5)))

height,width= img.shape

# 声明新的维度

new_dimension = (1000, 1000)

plt.subplot(231)

plt.title("SRC Image")

plt.imshow(img,cmap='seismic')

plt.subplot(232)

resized = cv2.resize(img, new_dimension, interpolation = cv2.INTER_NEAREST)

plt.title("INTER_NEAREST")

plt.imshow(resized,cmap='seismic')

plt.subplot(233)

resized = cv2.resize(img, new_dimension, interpolation = cv2.INTER_LINEAR)

plt.title("INTER_LINEAR")

plt.imshow(resized,cmap='seismic')

plt.subplot(234)

resized = cv2.resize(img, new_dimension, interpolation = cv2.INTER_AREA)

plt.title("INTER_AREA")

plt.imshow(resized,cmap='seismic')

plt.subplot(235)

resized = cv2.resize(img, new_dimension, interpolation = cv2.INTER_CUBIC)

plt.title("INTER_CUBIC")

plt.imshow(resized,cmap='seismic')

plt.subplot(236)

resized = cv2.resize(img, new_dimension, interpolation = cv2.INTER_LANCZOS4)

plt.title("INTER_LANCZOS4")

plt.imshow(resized,cmap='seismic')

plt.show()

利用wrapAffine实现缩放

数学原理

对图像的伸缩变换的变换矩阵M为

其中,

fx:代表x轴的焦距(缩放因子)

fy:代表y轴的焦距(缩放因子)

则可以得出以下式子:

具体代码演示

源代码:

'''

使用仿射矩阵实现

'''

import numpy as np

import cv2

img = cv2.imread('lena1.jpg')

height,width,channel = img.shape

# x轴焦距 1.5倍

fx = 1.5

# y轴焦距 2倍

fy = 2

# 声明变换矩阵 向右平移10个像素, 向下平移30个像素

M = np.float32([[fx, 0, 0], [0, fy, 0]])

# 进行2D 仿射变换

resized = cv2.warpAffine(img, M, (int(width*fx), int(height*fy)))

cv2.imwrite('resize_raw.jpg', resized)

运行效果:

原始图像:

我们利用random 模块生成一个5×5的随机矩阵。

# 生成一个随机噪点

img = np.uint8(np.random.randint(0,255,size=(5,5)))

源代码:

'''

仿射矩阵实现缩放 fx,fy

'''

import numpy as np

import cv2

from matplotlib import pyplot as plt

# 生成一个随机噪点

img = np.uint8(np.random.randint(0,255,size=(5,5)))

height,width = img.shape

# x轴焦距 1.5倍

fx = 1.5

# y轴焦距 2倍

fy = 2

# 声明变换矩阵 向右平移10个像素, 向下平移30个像素

M = np.float32([[fx, 0, 0], [0, fy, 0]])

# 进行2D 仿射变换

resized = cv2.warpAffine(img, M, (int(width*fx), int(height*fy)))

print(img)

print(resized)

# 数据可视化

plt.subplot(121)

plt.imshow(img, cmap="gray")

plt.subplot(122)

plt.imshow(resized,cmap="gray")

plt.show()

原图:

[[224 25 25 165 16]

[ 37 170 114 16 101]

[181 5 7 94 41]

[206 167 23 133 115]

[217 115 154 97 65]]

缩放后:

[[224 93 25 25 117 114 16]

[131 109 88 70 83 80 59]

[ 37 124 151 114 50 45 101]

[109 95 78 61 57 61 71]

[181 66 6 7 64 76 41]

[194 123 62 15 80 101 78]

[206 180 118 23 95 127 115]

[212 165 123 89 106 106 90]

[217 150 128 154 117 86 65]

[109 75 64 77 58 43 33]]

为了更加直观的感受, 我们可以进行数据可视化。

我们使用matplotlib进行绘制 resize前与resize之后的图片。

图像翻转

使用flip函数实现翻转

flip 函数原型

flip(src, flipCode[, dst]) -> dst

参数解析src 输入图片

flipCode 翻转代码

1 水平翻转 Horizontally (图片第二维度是column)

0 垂直翻转 *Vertically * (图片第一维是row)

-1 同时水平翻转与垂直反转 Horizontally & Vertically

为了方便使用, 你也可以封装成下面的函数

def flip(image, direction):

if direction == "h":

flipped = cv2.flip(image, 1)

elif direction == "v":

flipped = cv2.flip(image, 0)

else:

# both horizontally and vertically

flipped = cv2.flip(image, -1)

具体源码及效果展示

'''

反转Demo

'''

import numpy as np

import cv2

from matplotlib import pyplot as plt

img = cv2.imread('lena1.jpg')

def bgr2rbg(img):

'''

将颜色空间从BGR转换为RBG

'''

return img[:,:,::-1]

# 水平翻转

flip_h = cv2.flip(img, 1)

# 垂直翻转

flip_v = cv2.flip(img, 0)

# 同时水平翻转与垂直翻转

flip_hv = cv2.flip(img, -1)

plt.subplot(221)

plt.title('SRC')

plt.imshow(bgr2rbg(img))

plt.subplot(222)

plt.title('Horizontally')

plt.imshow(bgr2rbg(flip_h))

plt.subplot(223)

plt.title('Vertically')

plt.imshow(bgr2rbg(flip_v))

plt.subplot(224)

plt.title('Horizontally & Vertically')

plt.imshow(bgr2rbg(flip_hv))

plt.show()

利用numpy的索引实现翻转

利用numpy中ndarray的索引, 我们可以非常方便地实现图像翻转。

# 水平翻转

flip_h = img[:,::-1]

# 垂直翻转

flip_v = img[::-1]

# 水平垂直同时翻转

flip_hv = img[::-1, ::-1]

具体源码及效果展示

'''

使用numpy的索引进行图像反转

'''

import cv2

import numpy as np

from matplotlib import pyplot as plt

img = cv2.imread('lena1.jpg')

height,width,channel = img.shape

# 水平翻转

flip_h = img[:,::-1]

# 垂直翻转

flip_v = img[::-1]

# 水平垂直同时翻转

flip_hv = img[::-1, ::-1]

def bgr2rbg(img):

'''

将颜色空间从BGR转换为RBG

'''

return img[:,:,::-1]

plt.subplot(221)

plt.title('SRC')

plt.imshow(bgr2rbg(img))

plt.subplot(222)

plt.title('Horizontally')

plt.imshow(bgr2rbg(flip_h))

plt.subplot(223)

plt.title('Vertically')

plt.imshow(bgr2rbg(flip_v))

plt.subplot(224)

plt.title('Horizontally & Vertically')

plt.imshow(bgr2rbg(flip_hv))

plt.show()

利用wrapAffine实现翻转

图像翻转的数学原理注: width 代表图像的宽度; height代表图像的高度

水平翻转的变换矩阵

垂直翻转的变换矩阵

同时进行水平翻转与垂直翻转

具体源码及效果展示

'''

使用仿射矩阵实现反转

'''

import cv2

import numpy as np

from matplotlib import pyplot as plt

img = cv2.imread('lena1.jpg')

height,width,channel = img.shape

# 水平翻转

M1 = np.float32([[-1, 0, width], [0, 1, 0]])

flip_h = cv2.warpAffine(img, M1, (width, height))

# 垂直翻转

M2 = np.float32([[1, 0, 0], [0, -1, height]])

flip_v = cv2.warpAffine(img, M2, (width, height))

# 水平垂直同时翻转

M3 = np.float32([[-1, 0, width], [0, -1, height]])

flip_hv = cv2.warpAffine(img, M3, (width, height))

def bgr2rbg(img):

'''

将颜色空间从BGR转换为RBG

'''

return img[:,:,::-1]

plt.subplot(221)

plt.title('SRC')

plt.imshow(bgr2rbg(img))

plt.subplot(222)

plt.title('Horizontally')

plt.imshow(bgr2rbg(flip_h))

plt.subplot(223)

plt.title('Vertically')

plt.imshow(bgr2rbg(flip_v))

plt.subplot(224)

plt.title('Horizontally & Vertically')

plt.imshow(bgr2rbg(flip_hv))

plt.show()

「❤️ 感谢大家」点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)

欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git merge用法_常用命令之git操作(进阶篇)

几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。有人把 Git 的分支模型称为必杀技特性,而正是因为它,将 Git 从版本控制系统家族里区分出来。不同的分支可以理解为…

2G内存刚刚好 浅谈4G内存对笔记本的影响

随着Intel P3x系列芯片组的发布,DDR3内存的普及日益临近,AMD K10系列处理器AM2规格也正式支持DDR3内存,明年即将面临淘汰的DDRII内存是越来越便宜了。很多笔记本用户在购买笔记本的时候都把是否支持4G内存作为一个总要的衡量标准。官方资料里…

由object元素引出的事件注册问题和层级显示问题

项目有一个双击监控视频全屏的需求,视频播放使用的是IE下的ActiveX控件,web页面中使用HTML嵌入对象元素object。预期方案如下: 1.在开发ActiveX控件时加入双击事件。 2.通过div包裹object,控制div的大小从而间接实现全屏效果。 在…

cad钣金展开插件_钣金高级工考试大小头手工展开图步骤教程

提醒:点上方↑↑↑“钣金学习网”免费关注简单方法一: 等分弧画法简单方法二: 角度计算画法1、先画一条中心直线,在线上取一点A,过A点画一条与中心线垂直相交线。量取大头半径以A点为起点在相交线上标注一点&#…

介绍一个新鲜玩意 开源的杀毒软件

有“免费的午餐”我们为什么不吃呢?杀毒软件一定要购买或用D版吗?先别忙着下结论,请耐心看完本文,然后再告诉我你是怎么想的。(一)、ClamWin Free Antivirus 开源反病毒软件 GPL协议SourceForge页面&#x…

没有可用软件包 jenkins。_Jenkins分布式构建与并行构建

Jenkins分布式构建与并行构建 jenkins的架构 Jenkins采用的是“masteragent(slave)”架构。Jenkins master负责提供界面、处理HTTP请求及管理构建环境;构建的执行则由Jenkins agent负责 Jenkins agent的横向扩容:只需要增加agent就…

使用ping命令检查路由之解惑

网络工程师都会用到Ping,它是 检查 路由问题的有效办法。但也常听工程师抱怨:不可能,怎么会不通呢? 这样的困惑一般发生在自认为路由设置正确的时候。举几个笔者遇到的问题,欢迎大家补充。 最简单的三种情况&#xff…

什么是慢查询?如何通过慢查询日志优化?

日志就跟人们写的日记一样,记录着过往的事情。但是人的日记是主观的(记自己想记的内容),而数据库的日志是客观的,根据记录内容分为以下好几种日志: a、错误日志:记录启动、运行或停止mysqld时出…

qstring去掉特定字符_如何花式、批量且操作简单地处理字符?

文本字符的规范化,是批量处理的前提。多来源数据或是数据收集本身就必然存在不规范情况,于是批量地完成它就成了常见的需求。对于花式批量处理,自然要说到正则表达式。“正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好…

动漫字幕组 集合

贪婪大陆被非法收购始末 http://blog.csdn.net/freexploit/archive/2005/11/21/534050.aspx预测已经实现~~还好还好先把各字幕组的论坛 地址找了来~~像什么 花园 漫游的这些 大家是熟悉的不能在熟悉了~~所以我就没打上去了~~有不全的请朋友们自己找找吧----------~.~而且现在几…

性能度量RMSE

回归问题的典型性能度量是均方根误差(RMSE:Root Mean Square Error)。如下公式。 m为是你计算RMSE的数据集中instance的数量。x(i)是第i个实例的特征值向量 ,y(i)是其label(期望的模型输出)。如下:X是包含了所有实例的…

最近幻影的两个ARP欺骗工具 挺不错的

arpspoof 3.1b主要功能:ARP欺骗过程中进行数据修改,实现会话劫持攻击说明: 本程序公开源代码,为了换取更多朋友的指教实例: 欺骗192.168.0.108访问百度网站的全过程(注:#后是我加的注释)效果: 1…

python中math库最大值_python-math库解析

math库的数学常数(共4个) math.pi 表示Π,圆周率,值为3.141592653589…… math.e 表示e,自然对数,值为2.718…… math.inf 表示正无穷大,负无穷大为-math.inf math.nan 表示非浮点数标记 math库…

idea启动项目没错,可是debug却一直启动不起来

原因很简单: 断电打的太多了导致的,去掉不需要的断点之后就好了! 转载于:https://www.cnblogs.com/sllcom/p/9327908.html

一个牛人的经历---北京八年——从极度贫困到财务自由

一个牛人的经历---北京八年——从极度贫困到财务自由 第一章: 八年巨变 我1996年7月从东北的一所曾经非常有名的工科大学毕业,快毕业时听了一位同乡校 友姐姐的话“宁到好地方,不到好单位”,经过一番各式各样的努力,96…

python绘制不带颜色曲线图_Python画曲线图

画图方法 from matplotlib import font_manager import numpy as np import matplotlib . pyplot as plt zh_fontfont_manager . FontProperties ( fnamerc:\windows\fonts\simsun.ttc , size14 ) # create a arr x1[ x * 0.5 for x in range( 1 , 20 )] y1x1 # create a arr x…

【数学建模】day02-整数规划

基本类似于中学讲的整数规划--线性规划中变量约束为整数的情形。 目前通用的解法适合整数线性规划。不管是完全整数规划(变量全部约束为整数),还是混合整数规划(变量既有整数又有实数),MATLAB都提供了通用的求解函数。 一、0-1型整数规划 这类规划将变量…

那年的夏天很笛子

原文:salance-moon.spaces.live.com在某个阶段,我想应该是时候把至今为止影响自己走上美工&设计&程序之路的历程整理一下了。但是下笔的时候才发现,其实这几乎成了我童年的回忆录,因为程序暂且不算,美工&设…

python数据的格式输出_python

本文主要由Python String Format 一文翻译整理而来,在python中使用 % 进行格式化字符串由来已久,不过在python2.7 的版本中引入了新的格式化字符串的方法。虽然%号的方式依旧可用,不过在[PEP-3101] 中已有含蓄的警告称将完全淘汰python2.6之前…

[kafka]kafka集群实践

环境 iphostnameserver_id192.168.1.111UAT042192.168.1.112UAT031192.168.1.102UAT053配置hosts: 192.168.1.112 UAT03 192.168.1.111 UAT04 192.168.1.102 UAT05 安装jdk # rpm -ivh jdk-8u65-linux-x64.rpm # java -version java version "1.8.0_65" Java(TM) SE …