基于Python实现图片九宫格切图程序
目录
- 1、python代码实现图片分割成九宫格
- 2、C++代码实现图片分割成九宫格(附Opencv配置教程)
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; }
③、运行结果:
以上就是基于Python实现图片九宫格切图程序的详细内容,更多关于Python图片九宫格切图的资料请关注我们其它相关文章!