导航:首页 > 源码编译 > 图片旋转算法双线性插值

图片旋转算法双线性插值

发布时间:2023-03-28 16:27:00

❶ 数字图像处理 图像缩放以及旋转的算法代码

clearall;
I=imread('lena.bmp');
figure;imshow(I);title('原图像');
[m,n]=size(I);

%%%缩小临近法
M=0.5;%放大倍数

%新的图像大小
m1=m*M;n1=n*M;
%****************************************************
fori=1:m1
forj=1:n1;
J(i,j)=I(round(i/M),round(j/M));
end
end
%*****************************************************
figure;imshow(J);title('缩小图像');

%%%放大双线性插值法
I2=double(I);
N=1.5;%放大倍数
%新的图像大小
m2=m*N;n2=n*N;
J2=zeros(m2,n2);
fori=1:m2
forj=1:n2
x=i/N;
y=j/N;
u=floor(x);
v=floor(y);
a=x-u;
b=y-v;
ifu+2<=m&v+2<=n
J2(i,j)=I2(u+1,v+1)*(1-a)*(1-b)+I2(u+2,v+1)*a*(1-b)+I2(u+1,v+2)*(1-a)*b+I2(u+2,v+2)*a*b;
end
end
end
J2=uint8(J2);
figure;imshow(J2);title('放大图像');

%%%%%旋转
R=45*pi/180;%旋转角度
I=double(I);
%新图像大小
m2=ceil(m*cos(R)+n*sin(R));
n2=ceil(m*sin(R)+n*cos(R));

u0=m*sin(R);%平移量

%变换矩阵
T=[cos(R),sin(R);-sin(R),cos(R)];
L=zeros(m2,n2);
foru=1:n2
forv=1:m2
%新图像坐标变换到原图像坐标x和y中
temp=T*([u;v]-[u0;0]);
x=temp(1);
y=temp(2);
ifx>=1&x<=m&y>=1&y<=n%若变换出的x和y在原图像范围内
x_low=floor(x);
x_up=ceil(x);
y_low=floor(y);
y_up=ceil(y);

%双线性插值,p1到p4是(x,y)周围的四个点
p1=I(x_low,y_low);
p2=I(x_up,y_low);
p3=I(x_low,y_low);
p4=I(x_up,y_up);
s=x-x_low;
t=y-y_low;
L(u,v)=(1-s)*(1-t)*p1+(1-s)*t*p3+(1-t)*s*p2+s*t*p4;
end
end
end
L=uint8(L);
figure;imshow(L);

❷ 图像处理几何运算

图像的几何运算可以使得图像的几何形状发生变化,与点运算不同,几何运算可以看作像素在图像内移动过程,这个过程会改变图像物体对象之间的空间关系,本节就将针对matlab中图像处理几何运算进行介绍:
图像的插值
图像插值是指利用已知邻近像素点的灰度值来产生未知像素点的灰度值,使得原始图像具蔽塌亩有更高的分辨率。
interp2函数用于用于对图像进行插值,该函数的调用格式如下:
J=interp2(X,Y,I,X1,Y1);
X,Y表示原始像素值,X1,Y1插入新的像素,I表示原始图像,J表示插值后的图像
示例:对图形进行插值
编写对应的m文件如下:
clear all;
I=imread('cameraman.tif');
subplot(2,2,1)
imshow(I);
title('原始图像');
J1=interp2(double(I),2,'nearest');%%最邻近插值法%%
J2=interp2(double(I),2,'spline'); %%三次样条插值%%
J3=interp2(double(I),2,'linear'); %%线性插值%%
subplot(2,2,2)
imshow(uint8(J1));
title('最邻近插值法');
subplot(2,2,3)
imshow(uint8(J2));
title('三次样条插值法');
subplot(2,2,4)
imshow(uint8(J3));
title('线性插值法衫察');
程序运行结果如下图:
图像的旋转
imrotate函数用于实现图像的旋转,其调用格式如下:
J=imrotate(I,angle,method,bbox);
其中I表示原始图像,angle表示旋转角度,method表示插值方法,bbox表示旋转后的显示方法
示例:对图形进行旋转
编写对应的m文件如下:
clear all;
I=imread('pout.tif');
J=imrotate(I,60,'bilinear');%%对图像旋转60度,利用双线性插值法%%
subplot(1,2,1)
imshow(I);
title('原始图像');
subplot(1,2,2)
imshow(J);
title('旋转后的图像');
程序运行结果如下图:
图像的平移
图像平移变换应用的是直角坐标系的平移变换公式
示例:对图像进行平移
编写对应m文件如下:
clear all;
I=imread('peppers.png');
subplot(1,2,1)
imshow(I);
title('原始图像');
J=double(I);
J1=zeros(size(J));%%构造函数,像素默认为0%%
J2=size(J1);
X=60;
Y=60;
J3(X+1:J2(1),Y+1:J2(2),1:J2(3))=J(1:J2(1)-X,1:J2(2)-Y,1:J2(3));
subplot(1,2,2)
imshow(uint8(J3));
title('平移后图像');
程序运行后结果如下图:
图像的缩放
图像的缩放就是将原始图像进行放大或者缩小,imresize函数用于实现对图像的缩放,其调用格式如下:
J=imresize(I,K,method);
I,J分别表宏森示原始图像,缩放后图像,K表示缩放系数,method插值方法,可以去nearest最邻近插值法,bilinear双线性插值法,bicubic双立方插值法
示例:利用imresize函数对图像进行插值
编写对应m文件如下:
clear all;
I=imread('office_5.jpg');
subplot(2,2,1)
imshow(I);
title('原始图像');
J1=imresize(I,4,'nearest');
subplot(2,2,2)
imshow(uint8(J1))
title('最邻近插值法放大4倍后图像');
J2=imresize(I,0.2,'bilinear');
subplot(2,2,3)
imshow(uint8(J1))
title('双线性插值法缩小0.2倍后图像');
J3=imresize(I,0.2,'bicubic');
subplot(2,2,4)
imshow(uint8(J3))
title('双立方插值法缩小0.2倍后图像');
程序运行结果如下图:
图像的裁剪
图像的裁剪是将我们不需要的部分进行删除,只保留我们感兴趣的部分,imcrop函数用于实现对图像的剪切,该函数调用格式如下:
J=imcrop(I);表示对灰度图进行剪切
J=imcrop(X,map);表示对索引图进行剪切
J=imcrop(RGB);表示对真彩图进行剪切
示例:对索引图进行剪切
clear all
[X,map]=imread('peppers.png');
colormap(map);
subplot(1,2,1)
imshow(X,map);
title('原始索引图');
X2=imcrop(X,map,[50 50 120 130]);%%指定剪切区域大小和位置%%
subplot(1,2,2)
imshow(X2);
title('剪切后索引图');
程序运行结果如下图:
图像的镜像
镜像特点使图像左右颠倒或这上下颠倒,图像镜像分为水平镜像和垂直镜像,flipud函数用于图像进行左右翻转
示例:对图像进行镜像变换
编写对应的m文件如下:
clear all;
I=imread('cameraman.tif');
subplot(2,2,1)
imshow(I);
title('原始图像');
h=size(double(I));
%%水平镜像%%
J1(1:h(1),1:h(2))=I(1:h(1),h(2):-1:1);
subplot(2,2,2)
imshow(uint8(J1));
title('水平镜像后的图像');
%%竖直镜像%%
J2(1:h(1),1:h(2))=I(h(1):-1:1,1:h(2));
subplot(2,2,3)
imshow(uint8(J2));
title('垂直镜像后的图像');
J3(1:h(1),1:h(2))=I(h(1):-1:1,h(2):-1:1);
subplot(2,2,4)
imshow(uint8(J3));
title('对角镜像后的图像');
程序运行结果如下图:

❸ 图像处理中的双线性插值算法的原理

何东健的《数字图像处理》光盘第六章有前两种的程序
完整程序已发你邮箱
核心代码如下:
for(y = 0; y < nNewHeight; y++)
{
//指向新图像第y行
//注意此处宽度和高度是新图像的宽度和高度
pNewTemp = pNewBits;
pNewTemp += (nNewHeight - 1 - y) * nNewWidthBytes;
//针对图像每列进行操作
for(x = 0; x < nNewWidth; x++)
{
//计算该像素在源图像中的坐标
int y0 = (long) (y / fYZoomRatio + 0.5);
int x0 = (long) (x / fXZoomRatio + 0.5);

//判断是否在源图范围内
if( (x0 >= 0) && (x0 < nOldWidth) &&
(y0 >= 0) && (y0 < nOldHeight))
{
//用双线性插值
if(bBilinear)
{
unsigned char *pTemp = Interpolation (nOldWidth, nOldHeight,
(float)x0, (float)y0,
nOldWidthBytes, nMovedBits, pOldBits);
//复制像素
memcpy(pNewTemp, pTemp, nMovedBits);

delete [] pTemp ;
}
else
//最近邻插值
{
//指向源图像第y0行,第x0个像素
//注意此处宽度和高度应该互换
pOldTemp = pOldBits;
pOldTemp += (nOldHeight - 1 - y0) * nOldWidthBytes;
pOldTemp += x0 * nMovedBits;

//复制像素
memcpy(pNewTemp, pOldTemp, nMovedBits);
}
}
pNewTemp += nMovedBits;

}

}

❹ 双线性插值法原理 python实现

码字不易,如果此文对你有所帮助,请帮忙点赞,感谢!

一. 双线性插值法原理:

        ① 何为线性插值?

        插值就是在两个数之间插入一个数,线性插值原理图如下:

        ② 各种插值法:

        插值法的第一步都是相同的,计算目标图(dstImage)的坐标点对应原图(srcImage)中哪个坐标点来填充,计算公式为:

        srcX = dstX * (srcWidth/dstWidth)

        srcY = dstY * (srcHeight/dstHeight)

        (dstX,dstY)表示目标图像的某个坐标点,(srcX,srcY)表示与之对应的原图像的坐标点。srcWidth/dstWidth 和 srcHeight/dstHeight 分别表示宽和高的放缩比。

        那么问题来了,通过这个公式算出来的 srcX, scrY 有可能是小数,但是原图像坐标点是不存在小数的,都是整数,得想办法把它转换成整数才行。

        不同插值法的区别就体现在 srcX, scrY 是小数时,怎么将其变成整数去取原图像中的像素值。

        最近邻插值(Nearest-neighborInterpolation):看名字就很直白,四舍五入选取最接近的整数。这样的做法会导致像素变化不连续,在目标图像中产生锯齿边缘。

        双线性插值(Bilinear Interpolation):双线性就是利用与坐标轴平行的两条直线去把小数坐标分解到相邻的四个整数坐标点。权重与距离成反比。

        双三次插值(Bicubic Interpolation):与双线性插值类似,只不过用了相邻的16个点。但是需要注意的是,前面两种方法能保证两个方向的坐标权重和为1,但是双三次插值不能保证这点,所以可能出现像素值越界的情况,需要截断。

        ③ 双线性插值算法原理

        假如我们想得到未知函数 f 在点 P = (x, y) 的值,假设我们已知函数 f 在 Q11 = (x1, y1)、Q12 = (x1, y2), Q21 = (x2, y1) 以及 Q22 = (x2, y2) 四个点的值。最常见的情况,f就是一个像素点的像素值。首先在 x 方向进行线性插值,然后再在 y 方向上进行线性插值,最终得到双线性插值的结果。

    ④ 举例说明

二. python实现灰度图像双线性插值算法:

灰度图像双线性插值放大缩小

import numpy as np

import math

import cv2

def double_linear(input_signal, zoom_multiples):

    '''

    双线性插值

    :param input_signal: 输入图像

    :param zoom_multiples: 放大倍数

    :return: 双线性插值后的图像

    '''

    input_signal_cp = np.(input_signal)  # 输入图像的副本

    input_row, input_col = input_signal_cp.shape # 输入图像的尺寸(行、列)

    # 输出图像的尺寸

    output_row = int(input_row * zoom_multiples)

    output_col = int(input_col * zoom_multiples)

    output_signal = np.zeros((output_row, output_col)) # 输出图片

    for i in range(output_row):

        for j in range(output_col):

            # 输出图片中坐标 (i,j)对应至输入图片中的最近的四个点点(x1,y1)(x2, y2),(x3, y3),(x4,y4)的均值

            temp_x = i / output_row * input_row

            temp_y = j / output_col * input_col

            x1 = int(temp_x)

            y1 = int(temp_y)

            x2 = x1

            y2 = y1 + 1

            x3 = x1 + 1

            y3 = y1

            x4 = x1 + 1

            y4 = y1 + 1

            u = temp_x - x1

            v = temp_y - y1

            # 防止越界

            if x4 >= input_row:

                x4 = input_row - 1

                x2 = x4

                x1 = x4 - 1

                x3 = x4 - 1

            if y4 >= input_col:

                y4 = input_col - 1

                y3 = y4

                y1 = y4 - 1

                y2 = y4 - 1

            # 插值

            output_signal[i, j] = (1-u)*(1-v)*int(input_signal_cp[x1, y1]) + (1-u)*v*int(input_signal_cp[x2, y2]) + u*(1-v)*int(input_signal_cp[x3, y3]) + u*v*int(input_signal_cp[x4, y4])

    return output_signal

# Read image

img = cv2.imread("../paojie_g.jpg",0).astype(np.float)

out = double_linear(img,2).astype(np.uint8)

# Save result

cv2.imshow("result", out)

cv2.imwrite("out.jpg", out)

cv2.waitKey(0)

cv2.destroyAllWindows()

三. 灰度图像双线性插值实验结果:

四. 彩色图像双线性插值python实现

def BiLinear_interpolation(img,dstH,dstW):

    scrH,scrW,_=img.shape

    img=np.pad(img,((0,1),(0,1),(0,0)),'constant')

    retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)

    for i in range(dstH-1):

        for j in range(dstW-1):

            scrx=(i+1)*(scrH/dstH)

            scry=(j+1)*(scrW/dstW)

            x=math.floor(scrx)

            y=math.floor(scry)

            u=scrx-x

            v=scry-y

            retimg[i,j]=(1-u)*(1-v)*img[x,y]+u*(1-v)*img[x+1,y]+(1-u)*v*img[x,y+1]+u*v*img[x+1,y+1]

    return retimg

im_path='../paojie.jpg'

image=np.array(Image.open(im_path))

image2=BiLinear_interpolation(image,image.shape[0]*2,image.shape[1]*2)

image2=Image.fromarray(image2.astype('uint8')).convert('RGB')

image2.save('3.png')

五. 彩色图像双线性插值实验结果:

六. 最近邻插值算法和双三次插值算法可参考:

        ① 最近邻插值算法: https://www.cnblogs.com/wojianxin/p/12515061.html

         https://blog.csdn.net/Ibelievesunshine/article/details/104936006

        ② 双三次插值算法: https://www.cnblogs.com/wojianxin/p/12516762.html

        https://blog.csdn.net/Ibelievesunshine/article/details/104942406

七. 参考内容:

         https://www.cnblogs.com/wojianxin/p/12515061.html

         https://blog.csdn.net/Ibelievesunshine/article/details/104939936

❺ MATLAB,编写程序,将一个图像旋转45度(急!)

您好,如果按照你的程序的话,根据提示内容,在计算
i1=round(i*cos(a) - j*sin(a)+ n * sin(a))+1;
j1=round(i*sin(a) + j*cos(a));

这两个时会出现零值,那么,在MATLAB中索引F矩阵就是错误的了,你可以设置断点,然后单步运行一下看看在哪一步出现的零值,你根据旋转矩阵的计算应该是没有问题的,关键是灰度映射时可能出现零位置,最好在其中加入冲岁判断的语句,j1计算会出现0值。

你这样写,是沿坐标轴原点旋转,你说的我原来写的那个是沿固定点旋转,实现都是使用旋转矩阵,沿固定点只是先平移到原点,然后再平移回去,你可以看看,具体的我已经记袜判尘不太清楚了,呵呵,已经不做图像了。

我写的那个的程序:

function im_final = imrotate_my(im_path,theta,options)
% IM_ROTATE 两维图像旋转以及双线性灰度插值算法的实现
% im_path 图像存储路径
% theta 旋转角度,正数表示顺时针旋转
% options 可以为circular(超出范围部分,按照周期形式扩展)
% crop(超出部分置零,即全黑)
% Ref. 章毓晋. 图像工程(上册)——图像处理. 清华大学出版社
% Author: lskyp Date: 2009.08.12
% Version: V1.2 Original Version: V1.0 im_bilinear.m;im_rotate.m
% with the parameter options added

error(nargchk(2,3,nargin,'string'))

if nargin == 2
options = 'circular';
else
if ~ (strcmp(options,'circular') || strcmp(options,'crop'))
error('错误的输出方法')
end
end

im_init = imread(im_path);
im_init = double(im_init);
im_height = size(im_init,1);
im_width = size(im_init,2);
% 分别处理灰度图像和RGB图像
if ndims(im_init) == 3
im_final = zeros(im_height,im_width,3);
R = im_init(:,:,1);
G = im_init(:,:,2);
B = im_init(:,:,3);
R_final = im_final(:,:,1);
G_final = im_final(:,:,2);
B_final = im_final(:,:,3);
else
im_final = zeros(im_height,im_width);
end

rot_matrix = [cos(theta) -sin(theta);sin(theta) cos(theta)];
orig_h = (im_height + 1)/2;
orig_w = (im_width + 1)/2;
for h = 1:im_height
for w = 1:im_width
% 平移至原点,旋转,然告禅后再平移回去
new_position = rot_matrix*[h - orig_h;w - orig_w] + [orig_h;orig_w];

% 超出范围按周期扩展控制,options参数控制
if strcmp(options,'circular')
new_position(1) = mod(new_position(1),im_height);
new_position(2) = mod(new_position(2),im_width);
if new_position(1) == 0
new_position(1) = im_height;
end
if new_position(2) == 0
new_position(2) = im_width;
end
end

% 如果新位置为整数,那么直接赋予灰度值或者RGB值,否则,按照双线性插值计算。
% 使用后向映射
if new_position == round(new_position)
if new_position(1) == 0
new_position(1) = 1;
end
if new_position(2) == 0
new_position(2) = 1;
end
% 超出范围控制,options为crop选项,超出范围置零
if strcmp(options,'crop') && (new_position(1) >= im_height || ...
new_position(2) >= im_width || new_position(1) < 0 || ...
new_position(2) < 0)
if ndims(im_init) == 3
R_final(h,w) = 0;
G_final(h,w) = 0;
B_final(h,w) = 0;
else
im_final(h,w) = 0;
end
else
if ndims(im_init) == 3
R_final(h,w) = R(new_position(1),new_position(2));
G_final(h,w) = G(new_position(1),new_position(2));
B_final(h,w) = B(new_position(1),new_position(2));
else
im_final(h,w) = im_init(new_position(1),new_position(2));
end
end
else
h_new = floor(new_position(1));
w_new = floor(new_position(2));
if h_new == 0
h_new = 1;
end
if w_new == 0
w_new = 1;
end

% 超出范围控制,options为crop选项,超出范围置零
if strcmp(options,'crop') && (h_new >= im_height || ...
w_new >= im_width || h_new < 0 || ...
w_new < 0)
if ndims(im_init) == 3
R_final(h,w) = 0;
G_final(h,w) = 0;
B_final(h,w) = 0;
else
im_final(h,w) = 0;
end
else
% 边界控制
h1 = h_new + 1;
w1 = w_new + 1;
if h1 >= im_height + 1
h1 = mod(h1,im_height);
end
if w1 >= im_width + 1
w1 = mod(w1,im_width);
end
if ndims(im_init) == 3
% 双线性插值的实现过程
% Ref. 章毓晋. 图像工程(上册)——图像处理. 清华大学出版社
R_temp1 = R(h1,w_new)*(new_position(1) - h_new) + ...
R(h_new,w_new)*(h_new + 1 - new_position(1));
R_temp2 = R(h1,w1)*(new_position(1) - h_new) + ...
R(h_new,w1)*(h_new + 1 - new_position(1));
R_final(h,w) = R_temp1*(w_new + 1 - new_position(2)) + ...
R_temp2*(new_position(2) - w_new);
G_temp1 = G(h1,w_new)*(new_position(1) - h_new) + ...
G(h_new,w_new)*(h_new + 1 - new_position(1));
G_temp2 = G(h1,w1)*(new_position(1) - h_new) + ...
G(h_new,w1)*(h_new + 1 - new_position(1));
G_final(h,w) = G_temp1*(w_new + 1 - new_position(2)) + ...
G_temp2*(new_position(2) - w_new);
B_temp1 = B(h1,w_new)*(new_position(1) - h_new) + ...
B(h_new,w_new)*(h_new + 1 - new_position(1));
B_temp2 = B(h1,w1)*(new_position(1) - h_new) + ...
B(h_new,w1)*(h_new + 1 - new_position(1));
B_final(h,w) = B_temp1*(w_new + 1 - new_position(2)) + ...
B_temp2*(new_position(2) - w_new);
else
gray_temp1 = im_init(h1,w_new)*(new_position(1) - h_new) + ...
im_init(h_new,w_new)*(h_new + 1 - new_position(1));
gray_temp2 = im_init(h1,w1)*(new_position(1) - h_new) + ...
im_init(h_new,w1)*(h_new + 1 - new_position(1));
im_final(h,w) = gray_temp1*(w_new + 1 - new_position(2)) + ...
gray_temp2*(new_position(2) - w_new);
end
end
end
end
end
if ndims(im_init) == 3
im_final(:,:,1) = R_final;
im_final(:,:,2) = G_final;
im_final(:,:,3) = B_final;
end
im_final = im2uint8(mat2gray(im_final));

❻ 常用的像素操作算法:Resize、Flip、Rotate

图像缩放是把原图像按照目标尺寸放大或者缩小,是图像处理的一种。

图像缩放有多种算法。最为简单的是最临近插值算法,它是根据原图像和目标图像的尺寸,计算缩放的比例,然后根据缩放比例计算目标像素所依据的原像素,过程中自然会产生小数,这时就采用四舍五入,取与这个点最相近的点。

除此之外,还有双线性插值算法。

其公式如下:
f(i+u,j+v) =(1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1)

其中U和V表示浮点坐标的小数部分,显然离目标点距离越近的点的权重越大,这也正符合目标点的值与离他最近的点最接近这一事实。

cv4j 的resize目前支持这两种算法。通过Resize类的源码,可以看到有两个常量

使用最临近插值算法,将原图缩小到0.75倍。

使用双线性插值算法,将原图放大2倍。

效果如下:

Flip是翻转的意思,也被称为镜像变换。又可以分为水平镜像和垂直镜像,水平镜像即将图像左半部分和右半部分以图像竖直中轴线为中心轴进行兑换,而竖直镜像则是将图像上半部分和下半部分以图像水平中轴线为中心轴进行兑换。

flip的算法很简单

实现具体的左右翻转

实现具体的上下翻转

效果如下:

图像旋转是指图像以某一点为中心旋转一定的角度,形成一幅新的图像的过程。当然这个点通常就是图像的中心。既然是按照中心旋转,自然会有这样一个属性:旋转前和旋转后的点离中心的位置不变。

图像的旋转是图像几何变换的一种,旋转前后的图像的像素的RGB都是没有改变的,改变的只是每一个像素的所在位置。

cv4j 提供两种旋转的算法:NormRotate和FastRotate

下面以NormRotate为例,使用起来很简单,旋转120度,背景为红色。

效果如下:

cv4j 是 gloomyfish 和我一起开发的图像处理库,纯java实现,我们已经分离了一个Android版本和一个Java版本。

像素操作是 cv4j 的基本功能之一,本文介绍了三种常见的变换。我们可以通过图像的Resize、Flip、Rotate变换来丰富图片数据的多样性。

如果您想看该系列先前的文章可以访问下面的文集:
http://www.jianshu.com/nb/10401400

阅读全文

与图片旋转算法双线性插值相关的资料

热点内容
一对夫妻的电影叫什么 浏览:946
应用加密了如何解密 浏览:577
编程代码比赛平台 浏览:726
穿越在很多电影的小说 浏览:524
angularjs数据加密 浏览:523
k66单片机 浏览:735
鸿蒙文件夹如何自动归类 浏览:666
慧医通医生端安卓手机怎么下载 浏览:699
电影放到安卓手机哪个文件夹 浏览:192
VT命令 浏览:590
ftp链接到linux服务器地址 浏览:479
美国大尺度青春电影 浏览:21
李采谭演医生的电影名称 浏览:409
移动办公app第一次登录服务器地址 浏览:239
日本功夫电影 浏览:57
文件包文件夹 浏览:592
主角每次死亡都会变成另一个人 浏览:807
浪潮服务器如何调整凭证的尺寸 浏览:908
监控源码怎么打开 浏览:597
88影视打不开了 浏览:515