網(wǎng)站建設創(chuàng)業(yè)基礎ppt模板電商seo是什么意思啊
1、python代碼實現(xiàn)圖片分割成九宮格
需要包含的庫,沒有下載安裝的,需要自己安裝哦。
實現(xiàn)原理很簡單,就是用PIL庫不斷畫小區(qū)域,切下來存儲成新的小圖片。
假設每一個格子的寬和高分別是w、h,那么第row行(從0開始計數(shù)),第col列(從0開始計數(shù))的格子左上角坐標和右下角坐標分別是(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.sizecolWidth = 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++代碼實現(xiàn)圖片分割成九宮格(附Opencv配置教程)
①、本示例中用opencv實現(xiàn),需要配置,具體如下:
OpenCV下載地址:http://opencv.org/downloads.html,根據(jù)操作系統(tǒng)選擇合適的安裝包。本文使用的是isual Studio是VS2015版本。我把OpenCV解壓到C:\opencv。
在Windows 10 中添加環(huán)境變量
在系統(tǒng)變量的Path變量中添加以下兩個路徑:
配置VS的目錄
打開VS,新建一個C++項目,打開項目屬性,配置VC++ 目錄屬性:
選擇“包含目錄”,添加OpenCV的include目錄的路徑:
選擇“庫目錄”,添加OpenVC的lib文件夾的路徑:
添加附加依賴項
添加附加依賴項就是添加所有的lib文件的路徑,這些lib文件都是在前面那個庫目錄里面保存的。依次選擇“鏈接器”、“輸入”、“附加依賴項”,進入頁面,開始添加opencv_worldxxxx.lib文件路徑。
注意有兩種lib文件,一種帶d的是Debug模式,不帶d的是Release模式,OpenCV版本不同,前面的序號也不同,需要做相應的修改,兩種模式的lib最好不要放一起,否則有可能會導致其中一個模式出問題,Debug模式下使用namewindow函數(shù)創(chuàng)建窗口,運行代碼會出現(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ù)量(可實現(xiàn)任意等份分割)//制作九宮格每個小方塊寬高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; //空白間隔(實現(xiàn)九宮格效果)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;
}
③、運行結果:
最后
以上就是這篇文章分享的所有內(nèi)容了,看到的小伙伴如果覺得有用,記得收藏哦,防止下次走丟。