基于Python實(shí)現(xiàn)圖片九宮格切圖程序
1、python代碼實(shí)現(xiàn)圖片分割成九宮格
需要包含的庫(kù),沒(méi)有下載安裝的,需要自己安裝哦。
實(shí)現(xiàn)原理很簡(jiǎn)單,就是用PIL庫(kù)不斷畫(huà)小區(qū)域,切下來(lái)存儲(chǔ)成新的小圖片。
假設(shè)每一個(gè)格子的寬和高分別是w、h,那么第row行(從0開(kāi)始計(jì)數(shù)),第col列(從0開(kāi)始計(jì)數(shù))的格子左上角坐標(biāo)和右下角坐標(biāo)分別是(col * w, row * h),(col * w + w, r * h + h)。
代碼實(shí)例:
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
運(yùn)行結(jié)果:

2、C++代碼實(shí)現(xiàn)圖片分割成九宮格(附Opencv配置教程)
①、本示例中用opencv實(shí)現(xiàn),需要配置,具體如下:
OpenCV下載地址:http://opencv.org/downloads.html,根據(jù)操作系統(tǒng)選擇合適的安裝包。本文使用的是isual Studio是VS2015版本。我把OpenCV解壓到C:\opencv。
在Windows 10 中添加環(huán)境變量
在系統(tǒng)變量的Path變量中添加以下兩個(gè)路徑:

配置VS的目錄
打開(kāi)VS,新建一個(gè)C++項(xiàng)目,打開(kāi)項(xiàng)目屬性,配置VC++ 目錄屬性:
選擇“包含目錄”,添加OpenCV的include目錄的路徑:
選擇“庫(kù)目錄”,添加OpenVC的lib文件夾的路徑:


添加附加依賴(lài)項(xiàng)
添加附加依賴(lài)項(xiàng)就是添加所有的lib文件的路徑,這些lib文件都是在前面那個(gè)庫(kù)目錄里面保存的。依次選擇“鏈接器”、“輸入”、“附加依賴(lài)項(xiàng)”,進(jìn)入頁(yè)面,開(kāi)始添加opencv_worldxxxx.lib文件路徑。

注意有兩種lib文件,一種帶d的是Debug模式,不帶d的是Release模式,OpenCV版本不同,前面的序號(hào)也不同,需要做相應(yīng)的修改,兩種模式的lib最好不要放一起,否則有可能會(huì)導(dǎo)致其中一個(gè)模式出問(wèn)題,Debug模式下使用namewindow函數(shù)創(chuàng)建窗口,運(yùn)行代碼會(huì)出現(xiàn)兩幅圖片。
②、代碼示例:
#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;//小方塊數(shù)量(可實(shí)現(xiàn)任意等份分割)
//制作九宮格每個(gè)小方塊寬高
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; //空白間隔(實(shí)現(xiàn)九宮格效果)
Mat canvas = Mat(Size(src.cols + space * (num - 1), src.rows + space * (num - 1)), CV_8UC3, Scalar(255, 255, 255)); //畫(huà)布,用來(lái)制作九宮格圖片
int icount = 0; //就圖片分成9個(gè)小塊,將每一小塊摳圖至畫(huà)布
for (int i = 0; i < num; i++)
{
for (int j = 0; j < num; j++)
{
//小方塊相對(duì)于原圖左上角起點(diǎn)
int x = j * step_x;
int y = i * step_y;
//將小方塊摳圖至畫(huà)布。其中,每扣一小塊需跳過(guò)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;
}
③、運(yùn)行結(jié)果:

以上就是基于Python實(shí)現(xiàn)圖片九宮格切圖程序的詳細(xì)內(nèi)容,更多關(guān)于Python圖片九宮格切圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python報(bào)錯(cuò):PermissionError:?[Errno?13]?Permission?denied的解
這篇文章主要給大家介紹了關(guān)于Python報(bào)錯(cuò):PermissionError:?[Errno?13]?Permission?denied的解決辦法,文中給出了詳細(xì)的解決辦法,需要的朋友可以參考下2022-02-02
windows10下安裝TensorFlow Object Detection API的步驟
這篇文章主要介紹了windows10下安裝TensorFlow Object Detection API的步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
pycharm雙擊無(wú)響應(yīng)(打不開(kāi)問(wèn)題解決辦法)
這篇文章主要介紹了pycharm雙擊無(wú)響應(yīng)(打不開(kāi)問(wèn)題解決辦法),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Python中Parsel的兩種數(shù)據(jù)提取方式詳解
在網(wǎng)絡(luò)爬蟲(chóng)的世界中,數(shù)據(jù)提取是至關(guān)重要的一環(huán),Python 提供了許多強(qiáng)大的工具,其中之一就是 parsel 庫(kù),下面我們就來(lái)深入學(xué)習(xí)一下Parsel的兩種數(shù)據(jù)提取方式吧2023-12-12
PyQt使用QPropertyAnimation開(kāi)發(fā)簡(jiǎn)單動(dòng)畫(huà)
這篇文章主要介紹了PyQt使用QPropertyAnimation開(kāi)發(fā)簡(jiǎn)單動(dòng)畫(huà),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
基于Python實(shí)現(xiàn)四維圖像繪制系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何基于Python語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的四維圖像繪制系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-09-09
python 通過(guò)郵件控制實(shí)現(xiàn)遠(yuǎn)程控制電腦操作
這篇文章主要介紹了python 通過(guò)郵件控制電腦實(shí)現(xiàn)遠(yuǎn)程控制操作,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03

