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

تحميل الصورة من سلسلة بايت byte string في OpenCV في بايثون

Ali Ismael

السؤال

Recommended Posts

  • 1

يمكنك استخدام الكود التالي للقيام بعملية تحويل سلاسل byte string إلى صورة، ياستخدام التابع cv2.imdecode  و التابع fromstring، كما يلي:

from cv2 import cv
import numpy as np
import cv2
# من ملف أو قاعدة بيانات string تحميل الصورة ك 
my_f = open('foo.jpg')
im_string = my_f.read()  # هي السلسلة النصية التي تحوي البيانات im_string الآن أصبحت 
# إغلاق الملف
my_f.close()
#  1-D array الآن سيتم إنشاء مصفوفة
# im_string المصفوفة سيتم تشكيلها من البيانات التي تم تحميلها من السلسلة 
arr = np.fromstring(im_string, np.uint8) 
# image format الآن نستخدم التابع التالي لفك تشفير الصورة وجعلها بتنسيق صورة 
# cv2.IMREAD_COLOR
img_np = cv2.imdecode(arr, cv2.CV_LOAD_IMAGE_COLOR)
# CV
img_ipl = cv.CreateImageHeader((img_np.shape[1], img_np.shape[0]), cv.IPL_DEPTH_8U, 3)
cv.SetData(img_ipl, img_np.tostring(), img_np.dtype.itemsize * 3 * img_np.shape[1])
# ولاختبار الأنواع
print type(im_string) # <type 'str'>
print type(arr) # <type 'numpy.ndarray'>
print type(img_ipl) # <type 'cv2.cv.iplimage'>
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

هناك فكرة أخرى سهلة لتنفيذ هذا الأمر.

ببساطة نستطيع كتابة كود بحيث يقوم بقراءة الصورة byte by byte أي byte واحدة كل مرة،ثم يقوم بتخزينهم بجوار بعضهم باستخدام buffer وحين ينتهي من قراءة الملف كاملا يقوم بعرض ما قام بتخزينه أي الصورة كاملة.

الكود التالي يوضح هذا:

import base64
import json
import cv2
import numpy as np
#قراءة الملف
response = json.loads(open('./0.json', 'r').read())
string = response['img']
#تحويل ال bytes
jpg_original = base64.b64decode(string)
# استدعاء البايت من الbuffer
jpg_as_np = np.frombuffer(jpg_original, dtype=np.uint8)
#تحويل الصورة الي شكل مرئي
img = cv2.imdecode(jpg_as_np, flags=1)
cv2.imwrite('./0.jpg', img)

 

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...