Làm cách nào để bạn cắt giữa ảnh trong python?

Hãy đến để tự mình xem cách Cắt ảnh bằng OpenCV hoạt động như thế nào. Đầu tiên, tại sao chúng ta cần cắt xén? . Hoặc thậm chí để làm nổi bật một tính năng cụ thể của hình ảnh.  

Không có chức năng cụ thể để cắt xén bằng OpenCV, việc cắt mảng NumPy là công việc thực hiện. Mỗi hình ảnh được đọc vào, được lưu trữ trong một mảng 2D (cho mỗi kênh màu). Chỉ cần chỉ định chiều cao và chiều rộng (tính bằng pixel) của vùng cần cắt. Và thế là xong

  • Cắt xén bằng OpenCV
  • Lặn một hình ảnh thành các bản vá nhỏ
  • Ứng dụng thú vị
  • Bản tóm tắt

Các đoạn mã sau đây cho biết cách cắt ảnh bằng cả Python và C++. Hơn nữa trong bài đăng, bạn sẽ tìm hiểu chi tiết về những điều này

con trăn

# Import packages
import cv2
import numpy as np

img = cv2.imread('test.jpg')
print(img.shape) # Print image shape
cv2.imshow("original", img)

# Cropping an image
cropped_image = img[80:280, 150:330]

# Display cropped image
cv2.imshow("cropped", cropped_image)

# Save the cropped image
cv2.imwrite("Cropped Image.jpg", cropped_image)

cv2.waitKey(0)
cv2.destroyAllWindows()

C++

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}

Tôi đã hợp tác độc quyền với OpenCV. org mang đến cho bạn các khóa học chính thức về Trí tuệ nhân tạo, Thị giác máy tính và Học sâu để đưa bạn vào lộ trình có cấu trúc từ những bước đầu tiên đến khi thành thạo

Tìm hiểu thêm

Chúng tôi cho rằng bạn đã có OpenCV trong hệ thống của mình. Nếu bạn cần cài đặt OpenCV, vui lòng truy cập liên kết có liên quan bên dưới

  1. Cài đặt OpenCV trên Windows
  2. Cài đặt OpenCV trên MacOS
  3. Cài đặt OpenCV trên Ubuntu

con trăn

# Importing the cv2 library
import cv2 

Tải xuống mã Để dễ dàng làm theo hướng dẫn này, vui lòng tải xuống mã bằng cách nhấp vào nút bên dưới. Nó miễn phí.

Tải xuống mã

C++

#include
#include

// Namespace nullifies the use of cv::function(); 
using namespace std;
using namespace cv;

Đoạn mã trên nhập thư viện OpenCV bằng Python và C++ tương ứng

Cắt xén bằng OpenCV

Làm cách nào để bạn cắt giữa ảnh trong python?
Hình ảnh sẽ được sử dụng để cắt xén trong bài đăng này

con trăn

img=cv2.imread('test.png')

# Prints Dimensions of the image
print(img.shape) 

# Display the image
cv2.imshow("original", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

C++

Mat img = imread("test.jpg");

//Print the height and width of the image
cout << "Width : " << img.size().width << endl;
cout << "Height: " << img.size().height << endl;
cout << "Channels: " << img.channels() << endl;

// Display image
imshow("Image", img);
waitKey(0);
destroyAllWindows();

Đoạn mã trên đọc và hiển thị một hình ảnh và kích thước của nó. Kích thước không chỉ bao gồm chiều rộng và chiều cao của ma trận 2-D mà còn cả số lượng kênh (ví dụ: hình ảnh RGB có 3 kênh – Đỏ, Xanh lục và Xanh lam)

Hãy thử cắt phần ảnh chứa bông hoa

con trăn

cropped_image = img[80:280, 150:330] # Slicing to crop the image

# Display the cropped image
cv2.imshow("cropped", cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows() 

C++

Mat crop = img(Range(80,280),Range(150,330)); // Slicing to crop the image

// Display the cropped image
imshow("Cropped Image", crop);

waitKey(0);
destroyAllWindows();
return 0;

Làm cách nào để bạn cắt giữa ảnh trong python?
Kết quả hình ảnh đã cắt

Trong Python, bạn cắt hình ảnh bằng phương pháp tương tự như cắt mảng NumPy. Để cắt một mảng, bạn cần chỉ định chỉ số bắt đầu và kết thúc của chiều thứ nhất cũng như chiều thứ hai.  

  • Thứ nguyên đầu tiên luôn là số hàng hoặc chiều cao của hình ảnh
  • Thứ nguyên thứ hai là số lượng cột hoặc chiều rộng của hình ảnh.  

Theo quy ước, chiều đầu tiên của mảng 2D đại diện cho các hàng của mảng (trong đó mỗi hàng đại diện cho tọa độ y của hình ảnh). Làm cách nào để cắt một mảng NumPy?

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
4

Trong C++, chúng tôi sử dụng chức năng

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
5 để cắt hình ảnh.  

  • Giống như Python, nó cũng áp dụng slice.  
  • Ở đây cũng vậy, hình ảnh được đọc dưới dạng ma trận 2D, tuân theo quy ước tương tự được mô tả ở trên.  

Sau đây là cú pháp C++ để cắt ảnh

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
6

Chia hình ảnh thành các phần nhỏ bằng cách cắt xén

Một ứng dụng thực tế của việc cắt xén trong OpenCV có thể là chia ảnh thành các phần nhỏ hơn. Sử dụng các vòng lặp để cắt một đoạn khỏi hình ảnh. Bắt đầu bằng cách lấy chiều cao và chiều rộng của miếng vá cần thiết từ hình dạng của hình ảnh

con trăn

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
1

C++

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
2

Tải chiều cao và chiều rộng để chỉ định phạm vi cho đến khi các bản vá nhỏ hơn cần được cắt ra. Đối với điều này, hãy sử dụng hàm

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
7 trong Python. Bây giờ, cắt bằng hai vòng lặp
// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
8

  1. một cho phạm vi chiều rộng
  2. khác cho phạm vi chiều cao

Chúng tôi đang sử dụng các bản vá có chiều cao và chiều rộng lần lượt là 76 pixel và 104 pixel. Bước (số pixel chúng ta di chuyển qua hình ảnh) cho các vòng lặp bên trong và bên ngoài bằng với chiều rộng và chiều cao của các mảng mà chúng ta đang xem xét

con trăn

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
0

C++

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
1

Tiếp theo, hiển thị các bản vá hình ảnh, sử dụng chức năng

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
9. Lưu nó vào thư mục tệp, sử dụng hàm
# Importing the cv2 library
import cv2 
0.  

con trăn

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
2

C++

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
3

GIF bên dưới minh họa quá trình thực thi mã để chia hình ảnh thành các phần

Làm cách nào để bạn cắt giữa ảnh trong python?

Hình ảnh cuối cùng với các mảng hình chữ nhật được phủ lên sẽ trông như thế này.  

Làm cách nào để bạn cắt giữa ảnh trong python?
Kết quả sau khi chia ảnh thành các mảng

Hình ảnh sau đây hiển thị các bản vá hình ảnh riêng biệt được lưu vào đĩa

Làm cách nào để bạn cắt giữa ảnh trong python?
Hình ảnh gốc và các bản vá hình ảnh được lưu vào đĩa

Một số ứng dụng thú vị sử dụng Crop

  1. Bạn có thể sử dụng tính năng cắt xén để trích xuất một vùng quan tâm từ một hình ảnh và loại bỏ những phần khác mà bạn không cần sử dụng
  2. Bạn có thể trích xuất các bản vá từ một hình ảnh để huấn luyện mạng thần kinh dựa trên bản vá

Ứng dụng web Streamlit thú vị

Cắt ứng dụng bằng Streamlit.  

  • Sử dụng ứng dụng để tải lên bất kỳ hình ảnh nào từ thư mục tệp của bạn cần được cắt
  • Sau đó cắt hình ảnh bằng cách chỉ định kích thước của nó.  

Bạn có thể dùng thử ứng dụng web Streamlit tại đây

Bản tóm tắt

Trong blog này, chúng ta đã thảo luận về cú pháp cơ bản của việc cắt ảnh trong C++ và Python. Thao tác cắt xén được thực hiện bằng cách cắt, tôi. e. , chúng tôi chỉ định chiều cao và chiều rộng hoặc vùng được cắt làm kích thước của ma trận hình ảnh. Do đó, hình ảnh kết quả có thể được lưu trong một ma trận mới hoặc bằng cách cập nhật ma trận hiện có. Sau đó, ma trận này có thể được hiển thị dưới dạng hình ảnh bằng chức năng OpenCV

// Include Libraries
#include
#include

// Namespace nullifies the use of cv::function();
using namespace std;
using namespace cv;

int main()
{
	// Read image
	Mat img = imread("test.jpg");
	cout << "Width : " << img.size().width << endl;
	cout << "Height: " << img.size().height << endl;
	cout<<"Channels: :"<< img.channels() << endl;
	// Crop image
	Mat cropped_image = img(Range(80,280), Range(150,330));

	//display image
	imshow(" Original Image", img);
	imshow("Cropped Image", cropped_image);

	//Save the cropped Image
	imwrite("Cropped Image.jpg", cropped_image);

	// 0 means loop infinitely
	waitKey(0);
	destroyAllWindows();
	return 0;
}
9 hoặc có thể được ghi dưới dạng  tệp vào đĩa bằng chức năng OpenCV
# Importing the cv2 library
import cv2 
0. Chúng tôi cũng đã thảo luận về cách chia hình ảnh thành các phần nhỏ hơn và một số ứng dụng xung quanh nó