неділя, 27 жовтня 2024 р.

Очищення фону

Як замінити фон зображення на білий за допомогою OpenCV

Як замінити фон зображення на білий за допомогою OpenCV

У цій статті ми розглянемо, як можна за допомогою Python та бібліотеки OpenCV замінити фон зображення на білий. Це може бути корисним для обробки підписів, логотипів або інших об'єктів, де потрібен чистий білий фон. Нижче наведено код, який можна використовувати для цієї задачі.

Пояснення коду

Функція replace_background_with_white приймає зображення як вхідні дані, виконує обробку та зберігає результат з білим фоном у поточному каталозі. Вона використовує HSV-простір для точнішого виділення кольорів і маскування об'єкта. Цей підхід дозволяє залишити об'єкт видимим, а фон замінити на білий.

Код


import cv2
import numpy as np
import os

def replace_background_with_white(image, output_filename="processed_image.png"):
    """
    Замінює фон зображення на білий і зберігає його в поточному каталозі.

    Параметри:
    image (numpy.ndarray): Вхідне зображення у форматі OpenCV.
    output_filename (str): Назва файлу для збереження обробленого зображення.

    Повертає:
    str: Шлях до збереженого обробленого зображення.
    """
    # Перетворити зображення в HSV для кращого виділення кольорів
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

    # Встановити діапазон для світлих кольорів (білий фон)
    lower_white = np.array([0, 0, 200])
    upper_white = np.array([180, 20, 255])

    # Створити маску для виділення білого фону
    mask = cv2.inRange(hsv, lower_white, upper_white)

    # Інвертувати маску, щоб виділити об'єкт (підпис)
    mask_inv = cv2.bitwise_not(mask)

    # Застосувати маску до оригінального зображення
    result = cv2.bitwise_and(image, image, mask=mask_inv)

    # Створити білий фон
    white_bg = np.full_like(image, 255)  # Білий фон

    # Поєднати об'єкт з білим фоном
    final_image = np.where(result == 0, white_bg, result)

    # Зберегти зображення в поточний каталог
    output_path = os.path.join(os.getcwd(), output_filename)
    cv2.imwrite(output_path, final_image)

    return output_path

# Приклад використання
input_path = "sign.jpg"  # Заміни на шлях до твого файлу

# Завантажити зображення
image = cv2.imread(input_path)

# Виклик функції для обробки зображення та збереження результату
output_path = replace_background_with_white(image, "sign_white_bg.png")

print(f"Зображення збережено за адресою: {output_path}")
Як видно з прикладу, цей код автоматично визначає білі області на зображенні та замінює фон на білий. Ви можете використовувати цю функцію для різних типів зображень, що потребують видалення або заміни фону. Збереження відбувається в поточному каталозі, що робить процес простим і зручним для роботи.

субота, 13 квітня 2024 р.

Доступ до камери

Доступ до відеокамер у Python можна ефективно реалізувати за допомогою бібліотеки OpenCV, яка надає інструменти для захоплення відеопотоків з локальних та зовнішніх джерел. Користуючись класом `VideoCapture`, можна легко інтегрувати функціональність відеозахоплення в програми, що працюють як з веб-камерами, так і з файлами відео. Це дозволить взаємодіяти з відеопотоками в реальному часі, що відкриває можливості для створення програм відеонагляду, відеочатів, аналітики зображень та інших програм, які вимагають відеоаналітики.
 import cv2
import sys

# Ініціалізація змінної для визначення джерела відео
s = 0
# Перевірка чи передані аргументи командного рядка
if len(sys.argv) > 1:
    s = sys.argv[1]  # Використання першого аргументу як шляху до файлу або ідентифікатора камери

# Створення об'єкта VideoCapture для захоплення відео з камери або відтворення файлу
source = cv2.VideoCapture(s)

# Назва вікна, яке буде відображати відео
win_name = 'Camera Preview'
# Створення вікна для відображення відео з можливістю зміни розміру
cv2.namedWindow(win_name, cv2.WINDOW_NORMAL)

# Головний цикл для читання кадрів і відображення їх у вікні
while cv2.waitKey(1) != 27: # Чекати 1 мс і перервати цикл, якщо натиснуто Escape (27)
    has_frame, frame = source.read()  # Зчитування кадру
    if not has_frame:  # Якщо кадри закінчились, перервати цикл
        break
    cv2.imshow(win_name, frame)  # Відображення кадру у вікні

# Звільнення ресурсів та закриття вікон
source.release()
cv2.destroyWindow(win_name)
  

вівторок, 19 вересня 2023 р.

Вилучення метаданих із pdf файлу

Вилучення метаданих із PDF файлу

Метадані в PDF файлах можуть містити інформацію про автора, дату створення, програмне забезпечення, яке було використано для створення файлу, та інші деталі. Інколи може виникнути необхідність видалити або змінити ці метадані.

У цьому дописі ми розглянемо, як використовувати бібліотеку PyPDF2 для вилучення метаданих із PDF файлу.

Встановлення бібліотеки

Для початку потрібно встановити бібліотеку PyPDF2:

pip install PyPDF2
    

Вилучення метаданих

Ось приклад коду для вилучення метаданих із PDF файлу:

import PyPDF2

def remove_metadata(pdf_path, output_path):
    with open(pdf_path, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        
        # Створення нового PDF-файлу
        writer = PyPDF2.PdfWriter()
        
        # Копіювання всіх сторінок 
        for page_num in range(len(reader.pages)):
            page = reader.pages[page_num]
            writer.add_page(page)

        # Вилучення метаданих
        writer.add_metadata({
            '/Producer': '',
            '/Creator': '',
            '/CreationDate': '',
            '/ModDate': '',
            '/Author': ''
        })

        with open(output_path, 'wb') as output_file:
            writer.write(output_file)
             
    

Після запуску цього коду метадані у вихідному PDF-файлі будуть видалені.

Приклад використання

Для вилучення метаданих із вашого PDF файлу, ви можете використати нашу функцію таким чином:

# Приклад використання
remove_metadata('your_input_file.pdf', 'output_without_metadata.pdf')

Де 'your_input_file.pdf' - це шлях до вашого вхідного файлу, а 'output_without_metadata.pdf' - шлях, за яким буде збережено новий PDF файл без метаданих.

Зміна метаданих PDF файлу

Якщо ви бажаєте змінити деякі метадані, а не видаляти їх повністю, ви можете використати наступну функцію:

def modify_metadata(input_file, output_file, new_metadata):
    # Відкриваємо вхідний файл
    with open(input_file, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        
        # Створюємо новий PDF файл
        writer = PyPDF2.PdfWriter()
        
        # Додаємо сторінки з вхідного файлу
        for page in reader.pages:
            writer.add_page(page)
            
        # Змінюємо метадані
        writer.add_metadata(new_metadata)
        
        # Зберігаємо новий PDF файл
        with open(output_file, 'wb') as output:
            writer.write(output)

Приклад використання

Для зміни метаданих вашого PDF файлу:


new_data = {
    '/Title': 'Новий заголовок',
    '/Author': 'Новий автор',
    '/Subject': 'Нова тема',
    # ... (інші метадані для зміни) ...
}

# Приклад використання
modify_metadata('your_input_file.pdf', 'output_with_modified_metadata.pdf', new_data)

Де 'your_input_file.pdf' - це шлях до вашого вхідного файлу, 'output_with_modified_metadata.pdf' - шлях, за яким буде збережено новий PDF файл із зміненими метаданими, а new_data - словник з новими метаданими.

вівторок, 8 серпня 2023 р.

Конвертація TeX-Файлу з Формулами в DOCX за допомогою Pandoc

Конвертація TeX-Файлу з Формулами в DOCX за допомогою Pandoc

TeX є потужним інструментом для створення складних документів, особливо коли йдеться про математичні формули. Але інколи може виникнути потреба конвертувати TeX-файл в формат DOCX. В цьому пості ми розглянемо, як це зробити за допомогою Pandoc.

Встановлення Pandoc

Спершу вам потрібно встановити Pandoc. Це можна зробити за допомогою наступної команди:

pip install pandoc

Конвертація TeX-Файлу в DOCX

За допомогою Pandoc ви можете конвертувати TeX-файл в DOCX за допомогою такої команди:

pandoc myfile.tex -o myfile.docx

де myfile.tex - це ім'я вашого TeX-файлу, а myfile.docx - ім'я вихідного DOCX-файлу.

Збереження Формул

Pandoc автоматично зберігає більшість формул при конвертації з TeX в DOCX. Проте, деякі специфічні формули можуть потребувати додаткового налаштування або редагування вручну.

Заключення

Конвертація TeX-файлу в DOCX може бути здійснена за допомогою Pandoc з лише кількома командами. Це забезпечує гнучкий спосіб перетворення ваших наукових і математичних документів в загальноприйнятий формат, який можна легко відкрити та редагувати в багатьох текстових редакторах.

Автоматизація Конвертації за допомогою Bat-Файлу

Якщо вам потрібно конвертувати багато TeX-файлів, ви можете автоматизувати цей процес за допомогою bat-файлу. Ось як це зробити:

  1. Створіть новий текстовий файл з розширенням .bat, наприклад, convert.bat.
  2. Відкрийте файл в текстовому редакторі та додайте наступний рядок:
  3. pandoc %1.tex -o %1.docx
  4. Збережіть і закрийте файл.
  5. Тепер ви можете перетягнути ваш TeX-файл на цей bat-файл або запустити його з командного рядка, передавши ім'я TeX-файлу без розширення як аргумент, наприклад:
  6. convert myfile

Цей bat-файл використовує Pandoc для конвертації вказаного TeX-файлу в DOCX. Ви можете легко конвертувати кілька файлів, перетягуючи їх на bat-файл або запускаючи його з командного рядка для кожного файлу окремо.

Об'єднання кількох docx файлів в один файл

Вступ

Об'єднання кількох DOCX-файлів в один файл може бути корисним у різних ситуаціях, особливо при створенні звітів, конспектів та інших документів. У цьому пості я поясню, як можна об'єднати кілька DOCX-файлів в один за допомогою мови програмування Python та бібліотеки python-docx.

Підготовка

Перш ніж почати, вам потрібно встановити бібліотеку python-docx. Ви можете зробити це за допомогою наступної команди:

pip install python-docx

Об'єднання DOCX-файлів

Тепер ми можемо написати код для об'єднання DOCX-файлів. Ось основні кроки:

  1. Імпортування необхідних бібліотек:
  2. from docx import Document
  3. Створення нового об'єкта документа:
  4. merged_document = Document()
  5. Об'єднання кожного файлу: Ітеруйте через кожен файл, який потрібно об'єднати, та додайте його вміст до об'єднаного документа.
  6. files = ['file1.docx', 'file2.docx', 'file3.docx']
    for file_name in files:
        sub_doc = Document(file_name)
        for element in sub_doc.element.body:
            merged_document.element.body.append(element)
  7. Збереження об'єднаного документа:
  8. merged_document.save('merged.docx')

За допомогою цього підходу можна легко об'єднати кілька DOCX-файлів в один. Це може бути корисно для автоматизації робочих процесів та збільшення продуктивності.

Об'єднання DOCX-файлів з Малюнками

Об'єднання DOCX-файлів з малюнками вимагає додаткового кроку, оскільки малюнки мають бути коректно впорядковані у новому документі. Ми можемо використовувати бібліотеку docxcompose для цього завдання.

Встановлення docxcompose

Спершу вам потрібно встановити бібліотеку docxcompose:

pip install docxcompose

Код для об'єднання DOCX-файлів з малюнками

Тепер ми можемо використовувати docxcompose для об'єднання файлів з малюнками. Ось приклад коду:

from docxcompose.composer import Composer
from docx import Document

merged_document = Document()
composer = Composer(merged_document)

files = ['file1.docx', 'file2.docx', 'file3.docx']
for file_name in files:
    sub_doc = Document(file_name)
    composer.append(sub_doc)

composer.save('merged_with_images.docx')

Цей код зчитує кожен файл зі списку файлів та об'єднує їх в один документ, зберігаючи всі малюнки.

Об'єднання DOCX-файлів з малюнками може бути трохи складнішим, але з правильними інструментами це все одно досить просто. За допомогою бібліотеки docxcompose ми можемо зберегти всі малюнки та інші елементи форматування при об'єднанні файлів.

СhatCPT4.5