ইমেজ প্রসেসিং অ্যাপ

প্র্যাকটিস প্রোজেক্টস - পাইথন প্রোগ্রামিং (Python Programming) - Computer Programming

328

ইমেজ প্রসেসিং অ্যাপ হলো এমন একটি প্রোজেক্ট যেখানে Python এবং OpenCV ব্যবহার করে বিভিন্ন ইমেজ প্রসেসিং অপারেশন করা যায়। এই অ্যাপে আমরা বিভিন্ন ইমেজ ফিল্টার, রিসাইজ, কালার পরিবর্তন ইত্যাদি প্রক্রিয়া সম্পাদন করব।


প্রজেক্ট: ইমেজ প্রসেসিং অ্যাপ

ফিচারস

  1. ইমেজ লোড করা: ব্যবহারকারী একটি ইমেজ লোড করতে পারবে।
  2. ফিল্টার এবং প্রসেসিং: বিভিন্ন ফিল্টার যেমন গ্রেস্কেল, ব্লার, এজ ডিটেকশন প্রয়োগ করা।
  3. রিসাইজ: ইমেজ রিসাইজ করা।
  4. সেভ: প্রক্রিয়াজাত ইমেজটি সংরক্ষণ করা।

প্রয়োজনীয় লাইব্রেরি

  • tkinter: GUI তৈরি করতে।
  • opencv-python (cv2): ইমেজ প্রসেসিংয়ের জন্য।
  • PIL (Pillow): Tkinter GUI তে ইমেজ প্রদর্শনের জন্য।

প্রথমে টার্মিনালে নিচের কমান্ডগুলো চালিয়ে লাইব্রেরি ইন্সটল করতে হবে:

pip install opencv-python-headless pillow

Step 1: Tkinter এবং অন্যান্য মডিউল ইম্পোর্ট করা

import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
import cv2
import numpy as np

Step 2: Tkinter GUI সেটআপ করা

Tkinter GUI তৈরি করে ব্যবহারকারীকে একটি ফাইল থেকে ইমেজ লোড করার জন্য একটি বোতাম তৈরি করা হবে।

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Image Processing App")
root.geometry("600x600")

# ইমেজ প্রদর্শনের জন্য লেবেল
image_label = tk.Label(root)
image_label.pack(pady=10)

Step 3: ইমেজ লোড এবং প্রদর্শন ফাংশন

এই ফাংশনটি ব্যবহারকারীকে ফাইল ডায়ালগ থেকে ইমেজ সিলেক্ট করতে দেয় এবং তা প্রদর্শন করে।

def load_image():
    global img, img_display

    file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg *.jpeg *.png")])
    if file_path:
        img = cv2.imread(file_path)  # OpenCV ফরম্যাটে ইমেজ লোড করা
        display_image(img)

def display_image(image):
    # OpenCV ইমেজকে Pillow ইমেজে কনভার্ট করা
    img_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    img_pil = Image.fromarray(img_rgb)
    img_pil = img_pil.resize((400, 400))  # প্রদর্শনের জন্য রিসাইজ
    img_display = ImageTk.PhotoImage(img_pil)

    # ইমেজ লেবেলে প্রদর্শন করা
    image_label.config(image=img_display)

Step 4: ইমেজ প্রসেসিং ফাংশন তৈরি করা

1. গ্রেস্কেল ফিল্টার

def apply_grayscale():
    global img
    if img is not None:
        gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        display_image(cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR))
    else:
        messagebox.showwarning("Warning", "Please load an image first.")

2. ব্লার ফিল্টার

def apply_blur():
    global img
    if img is not None:
        blur_image = cv2.GaussianBlur(img, (15, 15), 0)
        display_image(blur_image)
    else:
        messagebox.showwarning("Warning", "Please load an image first.")

3. এজ ডিটেকশন

def apply_edge_detection():
    global img
    if img is not None:
        edges = cv2.Canny(img, 100, 200)
        display_image(cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR))
    else:
        messagebox.showwarning("Warning", "Please load an image first.")

Step 5: ইমেজ সেভ করার ফাংশন

এই ফাংশনটি প্রক্রিয়াজাত ইমেজটি সংরক্ষণ করবে।

def save_image():
    if img is not None:
        file_path = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPEG files", "*.jpg"), ("PNG files", "*.png")])
        if file_path:
            cv2.imwrite(file_path, img)
            messagebox.showinfo("Success", "Image saved successfully!")
    else:
        messagebox.showwarning("Warning", "Please load and process an image first.")

Step 6: Tkinter GUI-তে বাটন যুক্ত করা

Tkinter GUI তে ইমেজ লোড, প্রসেস এবং সেভ করার জন্য বাটন তৈরি করা হবে।

# ইমেজ লোড করার বাটন
load_button = tk.Button(root, text="Load Image", command=load_image, font=("Arial", 12))
load_button.pack(pady=5)

# প্রসেসিং অপশনগুলোর জন্য বাটন
gray_button = tk.Button(root, text="Apply Grayscale", command=apply_grayscale, font=("Arial", 12))
gray_button.pack(pady=5)

blur_button = tk.Button(root, text="Apply Blur", command=apply_blur, font=("Arial", 12))
blur_button.pack(pady=5)

edge_button = tk.Button(root, text="Apply Edge Detection", command=apply_edge_detection, font=("Arial", 12))
edge_button.pack(pady=5)

# ইমেজ সেভ করার বাটন
save_button = tk.Button(root, text="Save Image", command=save_image, font=("Arial", 12))
save_button.pack(pady=5)

Step 7: Tkinter মেইন লুপ চালানো

root.mainloop()

পূর্ণ কোড একসাথে

import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
import cv2
import numpy as np

# মেইন Tkinter উইন্ডো তৈরি
root = tk.Tk()
root.title("Image Processing App")
root.geometry("600x600")

# ইমেজ লেবেল
image_label = tk.Label(root)
image_label.pack(pady=10)

# গ্লোবাল ভ্যারিয়েবল
img = None
img_display = None

# ইমেজ লোড এবং প্রদর্শন ফাংশন
def load_image():
    global img, img_display

    file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg *.jpeg *.png")])
    if file_path:
        img = cv2.imread(file_path)  # OpenCV ফরম্যাটে ইমেজ লোড করা
        display_image(img)

def display_image(image):
    img_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    img_pil = Image.fromarray(img_rgb)
    img_pil = img_pil.resize((400, 400))
    img_display = ImageTk.PhotoImage(img_pil)
    image_label.config(image=img_display)

# গ্রেস্কেল ফিল্টার
def apply_grayscale():
    global img
    if img is not None:
        gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        display_image(cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR))
    else:
        messagebox.showwarning("Warning", "Please load an image first.")

# ব্লার ফিল্টার
def apply_blur():
    global img
    if img is not None:
        blur_image = cv2.GaussianBlur(img, (15, 15), 0)
        display_image(blur_image)
    else:
        messagebox.showwarning("Warning", "Please load an image first.")

# এজ ডিটেকশন
def apply_edge_detection():
    global img
    if img is not None:
        edges = cv2.Canny(img, 100, 200)
        display_image(cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR))
    else:
        messagebox.showwarning("Warning", "Please load an image first.")

# ইমেজ সেভ করার ফাংশন
def save_image():
    if img is not None:
        file_path = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPEG files", "*.jpg"), ("PNG files", "*.png")])
        if file_path:
            cv2.imwrite(file_path, img)
            messagebox.showinfo("Success", "Image saved successfully!")
    else:
        messagebox.showwarning("Warning", "Please load and process an image first.")

# বাটনগুলো
load_button = tk.Button(root, text="Load Image", command=load_image, font=("Arial", 12))
load_button.pack(pady=5)

gray_button = tk.Button(root, text="Apply Grayscale", command=apply_grayscale, font=("Arial", 12))
gray_button.pack(pady=5)

blur_button = tk.Button(root, text="Apply Blur", command=apply_blur, font=("Arial", 12))
blur_button.pack(pady=5)

edge_button = tk.Button(root, text="Apply Edge Detection", command=apply_edge_detection, font=("Arial", 12))
edge_button.pack(pady=5)

save_button = tk.Button(root, text="Save Image", command=save_image, font=("Arial", 12))
save_button.pack(pady=5)

root.mainloop()

কোড ব্যাখ্যা

load_image() Function: ব্যবহারকারী ইমেজ লোড করলে OpenCV ব্যবহার করে তা পড়া হয় এবং Tkinter লেবেলে প্রদর্শিত হয়।

display_image() Function: OpenCV থেকে পাওয়া ইমেজকে Tkinter এর Label-এ দেখানোর জন্য কনভার্ট করা হয়।

apply_grayscale(), apply_blur(), apply_edge_detection() Functions: এই ফাংশনগুলো ইমেজের উপর বিভিন্ন প্রসেসিং অপারেশন করে এবং প্রসেসড ইমেজ display_image() ফাংশনের মাধ্যমে দেখানো হয়।

save_image() Function: প্রক্রিয়াজাত ইমেজটি নির্দিষ্ট ফরম্যাটে সেভ করে।


উপসংহার

এই ইমেজ প্রসেসিং অ্যাপটি একটি সহজ ও কার্যকরী টুল যা বিভিন্ন ধরনের ইমেজ প্রসেসিং অপারেশন পরিচালনা করতে সক্ষম। OpenCV এবং Tkinter ব্যবহার করে আরও অনেক ধরনের ফিল্টার এবং অপশন যোগ করা যেতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...