Zeina Almakdisi نشر 6 أكتوبر 2023 أرسل تقرير نشر 6 أكتوبر 2023 (معدل) مرحبا... يظهر الخطأ التالي : output_image_path = "object-detection-" +image_path.split('.')[0] + ".jpg" AttributeError: 'numpy.ndarray' object has no attribute 'split' في الجزء من الكود: output_image_path = "object-detection-" +image_path.split('.')[0] + ".jpg" cv2.imwrite(output_image_path, image) cv2.destroyAllWindows() وعند تحويل image_path الى سلسلة نصية str(image_path) يظهر الخطأ التالي: cv2.error: OpenCV(4.8.0): -1 : error: (-5:Bad argument) in function 'imwrite' > Overload resolution failed: > - img is not a numpy array, neither a scalar > - Expected Ptr<cv::UMat> for argument 'img' جربت العديد من الحلول ولم ينجح تم التعديل في 6 أكتوبر 2023 بواسطة Zeina Almakdisi اقتباس
0 Mustafa Suleiman نشر 7 أكتوبر 2023 أرسل تقرير نشر 7 أكتوبر 2023 أنتِ تستخدمين مصفوفة NumPy لـ image_path، ومصفوفات NumPy ليس لديها خاصية split(). لذلك، عليك تحويل image_path إلى سلسلة نصية قبل استخدامها في str.split() كالتالي: image_path = str(image_path) output_image_path = "object-detection-" + image_path.split('.')[0] + ".jpg" من أجل تحويل image_path إلى سلسلة نصية، ثم سيستخدمها str.split() لإنشاء سلسلة جديدة تتكون من اسم الملف بدون الامتداد. وسبب ظهور الخطأ الثاني هو أنّك تحاولين استخدام cv2.imwrite() لكتابة مصفوفة NumPy كصورة، في الوقت الذي تتوقع فيه cv2.imwrite() إشارة OpenCV UMat كصورة، عليك إجراء التعديل التالي: image = cv2.imread(image_path) cv2.imwrite(output_image_path, image) حتى يتم قراءة الصورة من image_path إلى إشارة OpenCV UMat ثم سيستخدم cv2.imwrite() تلك الإشارة لكتابة الصورة إلى ملف. 1 اقتباس
0 Zeina Almakdisi نشر 7 أكتوبر 2023 الكاتب أرسل تقرير نشر 7 أكتوبر 2023 بتاريخ 11 ساعة قال Mustafa Suleiman: أنتِ تستخدمين مصفوفة NumPy لـ image_path، ومصفوفات NumPy ليس لديها خاصية split(). لذلك، عليك تحويل image_path إلى سلسلة نصية قبل استخدامها في str.split() كالتالي: image_path = str(image_path) output_image_path = "object-detection-" + image_path.split('.')[0] + ".jpg" من أجل تحويل image_path إلى سلسلة نصية، ثم سيستخدمها str.split() لإنشاء سلسلة جديدة تتكون من اسم الملف بدون الامتداد. وسبب ظهور الخطأ الثاني هو أنّك تحاولين استخدام cv2.imwrite() لكتابة مصفوفة NumPy كصورة، في الوقت الذي تتوقع فيه cv2.imwrite() إشارة OpenCV UMat كصورة، عليك إجراء التعديل التالي: image = cv2.imread(image_path) cv2.imwrite(output_image_path, image) حتى يتم قراءة الصورة من image_path إلى إشارة OpenCV UMat ثم سيستخدم cv2.imwrite() تلك الإشارة لكتابة الصورة إلى ملف. شكرا لك بعد تطبيق التعديلات ظهر الخطأ التالي cv2.imwrite(output_image_path, image) cv2.error: OpenCV(4.8.0) D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:787: error: (-215:Assertion failed) !_img.empty() in function 'cv::imwrite' علما أنه عند طباعة print(image_path) يظهر الخرج على شكل مصفوفات image = cv2.imread(image_path) print(image) يظهر الخرج none فقط cv2.imwrite(output_image_path, image) اقتباس
0 عمار معلا نشر 7 أكتوبر 2023 أرسل تقرير نشر 7 أكتوبر 2023 بتاريخ 15 ساعة قال Zeina Almakdisi: جربت العديد من الحلول ولم ينجح انت تقومين باستخدام مكتبة numpy array في image_path لذلك يجب عليكِ أن تتأكدي من القيمة التي تم تعينيها في image_path يجب أن لا تكون array numpy حتى لو استطعنا تحويلها ب str، يعتبر حل صحيح ولكن هذا خاطئ منطقيا لأنه سوف يأثر على جودة الكود الخاص بك وسوف تظهر اخطاء في الكود عندما مراجعة الكود الخاص بك، من المتوقع إيضا بالكود الخاص بك أنك تقومي بإسناد الصورة إلى image_path ومسار الصورة إلى image لذلك يظهر خطأ img is not a numpy array اذا كان image بالفعل هو مصفوفة معبرة عن الصورة تستطيعِ تحويلها إلى مصفوفة numpy لكي تناسب تابع imwrite كالتالي import numpy as np output_image_path = "path/to/new_image" cv2.imwrite(output_image_path, np.array(image)) cv2.destroyAllWindows() طبعا يتم ذلك بعد أن تقومي بالتعديل على المسار الخاص بالصورة 1 اقتباس
السؤال
Zeina Almakdisi
مرحبا...
يظهر الخطأ التالي :
output_image_path = "object-detection-" +image_path.split('.')[0] + ".jpg"
AttributeError: 'numpy.ndarray' object has no attribute 'split'
في الجزء من الكود:
output_image_path = "object-detection-" +image_path.split('.')[0] + ".jpg" cv2.imwrite(output_image_path, image) cv2.destroyAllWindows()
وعند تحويل image_path الى سلسلة نصية str(image_path)
يظهر الخطأ التالي:
cv2.error: OpenCV(4.8.0): -1 : error: (-5:Bad argument) in function 'imwrite'
> Overload resolution failed:
> - img is not a numpy array, neither a scalar
> - Expected Ptr<cv::UMat> for argument 'img'
جربت العديد من الحلول ولم ينجح
تم التعديل في بواسطة Zeina Almakdisi3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.