基于Python实现图片九宫格切图程序
作者:逃逸的卡路里 时间:2023-11-01 21:16:38
1、python代码实现图片分割成九宫格
需要包含的库,没有下载安装的,需要自己安装哦。
实现原理很简单,就是用PIL库不断画小区域,切下来存储成新的小图片。
假设每一个格子的宽和高分别是w、h,那么第row行(从0开始计数),第col列(从0开始计数)的格子左上角坐标和右下角坐标分别是(col * w, row * h),(col * w + w, r * h + h)。
代码实例:
import tkinter as tk
from PIL import Image,ImageTk
import sys
import tkinter.filedialog
#先将图片填充为正方形
def fill_image(image):
width, height = image.size
#比较图片的宽和高,选取值较大的作为新图的宽
newImage_width = width if width > height else height
#生成正方形图,空白处用白色填充
newImage = Image.new(image.mode, (newImage_width, newImage_width), color='white')
#如果原图宽大于高,则填充图片的竖直维度
if width > height:
newImage.paste(image, (0, int((newImage_width - height) / 2)))
else:
newImage.paste(image, (int((newImage_width - width) / 2),0))
return newImage
# 切图(切成9张图)
def cut_image(image):
width, height = image.size
colWidth = int(width / 3) #一行3张
image_grid = []
for i in range(0,3):
for j in range(0,3):
row = (j*colWidth,i*colWidth,(j+1)*colWidth,(i+1)*colWidth)
image_grid.append(row)
image_list = [image.crop(row) for row in image_grid]
return image_list
运行结果:
2、C++代码实现图片分割成九宫格(附Opencv配置教程)
①、本示例中用opencv实现,需要配置,具体如下:
OpenCV下载地址:http://opencv.org/downloads.html,根据操作系统选择合适的安装包。本文使用的是isual Studio是VS2015版本。我把OpenCV解压到C:\opencv。
在Windows 10 中添加环境变量
在系统变量的Path变量中添加以下两个路径:
配置VS的目录
打开VS,新建一个C++项目,打开项目属性,配置VC++ 目录属性:
选择“包含目录”,添加OpenCV的include目录的路径:
选择“库目录”,添加OpenVC的lib文件夹的路径:
添加附加依赖项
添加附加依赖项就是添加所有的lib文件的路径,这些lib文件都是在前面那个库目录里面保存的。依次选择“链接器”、“输入”、“附加依赖项”,进入页面,开始添加opencv_worldxxxx.lib文件路径。
注意有两种lib文件,一种带d的是Debug模式,不带d的是Release模式,OpenCV版本不同,前面的序号也不同,需要做相应的修改,两种模式的lib最好不要放一起,否则有可能会导致其中一个模式出问题,Debug模式下使用namewindow函数创建窗口,运行代码会出现两幅图片。
②、代码示例:
#include "stdafx.h"
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("逃逸的卡路里.png");
if (src.empty())
{
cout << "No Image!" << endl;
system("pause");
return -1;
}
//原图宽高
int width = src.cols;
int height = src.rows;
int num = 3;//小方块数量(可实现任意等份分割)
//制作九宫格每个小方块宽高
int step_x = width / num;
int step_y = height / num;
//重新resize图片尺寸
resize(src, src, Size(step_x * num, step_y * num), 1, 1, INTER_LINEAR);
int space = 5; //空白间隔(实现九宫格效果)
Mat canvas = Mat(Size(src.cols + space * (num - 1), src.rows + space * (num - 1)), CV_8UC3, Scalar(255, 255, 255)); //画布,用来制作九宫格图片
int icount = 0;//就图片分成9个小块,将每一小块抠图至画布
for (int i = 0; i < num; i++)
{
for (int j = 0; j < num; j++)
{
//小方块相对于原图左上角起点
int x = j * step_x;
int y = i * step_y;
//将小方块抠图至画布。其中,每扣一小块需跳过space空白
src(Rect(x, y, step_x, step_y)).copyTo(canvas(Rect(x + space * j, y + space * i, step_x, step_y)));
char cpicpath[6];
sprintf(cpicpath, "%d.jpg", icount);;
imwrite(cpicpath, src(Rect(x, y, step_x, step_y)));// 保存切割的图片
icount++;
}
}
imshow("canvas", canvas);
imshow("test", src);
waitKey(0);
system("pause");
return 0;
}
③、运行结果:
来源:https://blog.csdn.net/u014740628/article/details/129174784
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
一文带你搞懂Python中的pyc文件
![](https://img.aspxhome.com/file/2023/0/77630_0s.png)
Windows系统下实现pycharm运行.sh文件(本地运行和打开服务器终端)
![](https://img.aspxhome.com/file/2023/4/75894_0s.png)
数据库新手入门之MYSQL出错代码列表
numpy.std() 计算矩阵标准差的方法
Python 'takes exactly 1 argument (2 given)' Python error
对acronym、abbr标签的理解
妙用Dreamweaver MX共享WPS Office文件
MySQL学习第三天 Windows 64位操作系统下验证MySQL
![](https://img.aspxhome.com/file/2023/9/112859_0s.png)
解决golang 关于全局变量的坑
JavaScript组件打包模式
人脸检测——基于Flask和PaddleHub
![](https://img.aspxhome.com/file/2023/0/61750_0s.jpg)
简单了解python 生成器 列表推导式 生成器表达式
python3 wechatpy微信支付的项目实践
![](https://img.aspxhome.com/file/2023/5/87975_0s.jpg)
Python爬虫:url中带字典列表参数的编码转换方法
javascript常用的方法整理
MYSQL使用inner join 进行 查询/删除/修改示例
制作设置404页面
![](https://img.aspxhome.com/file/UploadPic/20097/3/200973131448261s.jpg)
使用Java实现先查询缓存再查询数据库
![](https://img.aspxhome.com/file/2023/3/119133_0s.png)
vue3动态加载对话框的方法实例
![](https://img.aspxhome.com/file/2023/9/126509_0s.png)