اذهب إلى المحتوى
  • 0

صورة المعكوس أو المتمم باستخدام OpenCV في بايثون

Ali Ismael

السؤال

Recommended Posts

  • 1

يمكنك استخدام الدالة bitwise_not لإيجاد صورة المعكوس (المتمم) للصورة الأصلية، حيث نمرر الصورة للدالة وهي تتكفل بإنتاجها حيث تكون قيمة كل بكسل في الصورة الناتجة هي المتمم إلى 255 لقيمة البكسل الأصلية. فمثلاً لو كانت قيمة البكسل في الصورة الأصلية 100 ستكون قيمته في الصورة الناتجة 155 لأن:

255-100=155

مثال:

import cv2
import numpy as np
# قراءة الصورة
image = cv2.imread('/content/test.jpg')
# تحويلها إلى الصيغة الرمادية
image=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# عكس الصورة
inverted = cv2.bitwise_not(image)
from google.colab.patches import cv2_imshow
cv2_imshow(image)
cv2_imshow(inverted)

الصورة الأصلية:
index.png.1e57b6d21b8c3511374c764c97a50cad.png
الصورة الناتجة:
index.png.127ec3996995359e8d549a8f1e4c4f76.png
كما يمكنك استخدام الدالة np.invert التي تؤدي نفس الغرض:

import cv2
import numpy as np
image = cv2.imread('/content/test.jpg')
# تحويلها إلى الصيغة الرمادية
image=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# عكس الصورة
inverted = np.invert(image)
from google.colab.patches import cv2_imshow
cv2_imshow(image)
cv2_imshow(inverted)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

في البداية علينا فهم معنى الصورة الرمادية، هي تتكون من عدد من البيسكل متراوحة من 0 الى 255 بحيث ان 0 هو الأسود و 255 هو الابيض.

لذلك لعكس الأبيض مع الأسود كل ما علينا فعله هو طرح ال 255 من قيمة كل بيكسل وبذلك يتحول الأبيض الي مقابله من الأسود ببساطة.

قد تستطيع فعل هذا بشكل يدوي عن طريق طرح كل بيكسل ثم رسم الصورة الجديدة هكذا:

def inverte(imagem, name):
    imagem = (255-imagem)
    cv2.imwrite(name, imagem)


def inverte2(imagem, name):
    for x in np.nditer(imagem, op_flags=['readwrite']):
        x = abs(x - 255)
    cv2.imwrite(name, imagem)


if __name__ == '__main__':
    nome = str(sys.argv[1])
    image = cv2.imread(nome)
    gs_imagem = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    inverte(gs_imagem, "invertida.png")
    inverte2(gs_imagem, "invertida2.png")

أو بشكل مختصر بعلامه ~ والتي تعني العكس كالتالي:

import cv2
image = cv2.imread("img.png")
image = ~image
cv2.imwrite("img_inv.png",image)

أو باستخدام bitwise_not:

imagem = cv2.bitwise_not(imagem)

وفي كل الأحوال تظهر كالتالي:

الصورة الأصلية

or.PNG.cff8a2cc32fa44e682536ba9fb12c5c8.PNG

بعد التحويل:

cut.PNG.8365d03ce64782b782ad674388e06be3.PNG

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...