基于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


猜你喜欢
- 附上代码与运行结果截图:import time# 获取当前时间now = time.localtime()# 格式化日期now_ = tim
- 从一个问题开始最近银行这个事情闹的比较厉害啊,很多储户的钱放在银行,就不翼而飞了,而银行还不管不问,说是用户的责任,打官司,用户还能输了,这
- 对于php和mysql的连接在许多blog上都有说明,为了将mysql中的查询,修改,插入等操作掌握,本文介绍了一下如何采用mysql做一个
- 双指数函数待拟合曲线为 y(x) = bepx + ceqximport matplotlib.pyplot as pltx = ([0.0
- 1. 前言最近打算做一批日历给亲朋好友,但是从 iPhone 上导出的照片格式是 HEIC 格式,而商家的在线制作网站不支持这种图片格式PS
- 网上的教程大多数是教大家如何加载自定义模型和函数,如下图这个SelfAttention层是在训练过程自己定义的一个class,但如果要加载这
- 红包:Lena椒盐噪声图片:# -*- coding: utf-8 -*-"""Created on Sat
- PHP页面中文乱码出现的原因有几种,一种是页面编码不统计一,二是数据库未设置编码,三是apache编码有问题,下面我来给大家介绍两种解决办法
- Vue-router是伴随着Vue框架出现的路由系统,它也是公认的一种优秀的路由解决方案。在使用Vue-router时候,我们常常会使用其自
- Event事件用来控制线程的执行出现e.wait(),就会把这个线程设置为False,就不能执行这个任务;只要有一个线程出现e.set(),
- 阅读上一章:Chapter 6 短语元素Chapter 7 锚点HTML中的链接,正确的说法应该称作"锚点",它不仅让我
- 前言最近在功能性测试的过程中,需要在Python环境下用OpenCV读取网络摄像头的视频流,接着用目标检测器进行视屏帧的后续处理。在测试过程
- Xml_javascript分页实例:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.
- 在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能
- 一、XGBoostXGBoost并不是一种模型,而是一个可供用户轻松解决分类、回归或排序问题的软件包。1 XGBoost的优点简单易用。相对
- 将np图片(imread后的图片)转码为base64格式def image_to_base64(image_np):image = cv2.
- 项目结构├── node_modules # 项目依赖包目录├── build &nb
- 前言本文是美团一位大佬写的,还不错拿出来和大家分享下,代码中嵌套在html中sql语句是java框架的写法,理解其sql要执行的语句即可。背
- 本文实例为大家分享了Vue+Echarts实现简单折线图的具体代码,供大家参考,具体内容如下Vue+Echarts实现一个折线图,打开vue
- 使用ajax获取服务器数据返回给客户端,出现中文乱码。在之前的一个ajax应用中指定codepage=936,将所有页面编码都指定为GB23