ฉันใช้ opencv 2.4.2, python 2.7 รหัสง่ายๆต่อไปนี้สร้างหน้าต่างชื่อที่ถูกต้อง แต่เนื้อหาว่างเปล่าและไม่แสดงภาพ:
import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)
มีใครรู้เกี่ยวกับปัญหานี้บ้าง?
ฉันใช้ opencv 2.4.2, python 2.7 รหัสง่ายๆต่อไปนี้สร้างหน้าต่างชื่อที่ถูกต้อง แต่เนื้อหาว่างเปล่าและไม่แสดงภาพ:
import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)
มีใครรู้เกี่ยวกับปัญหานี้บ้าง?
คำตอบ:
imshow()
ใช้งานได้กับwaitKey()
:
import cv2
img = cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow', img)
cv2.waitKey()
(ข้อความวนรอบทั้งหมดที่จำเป็นสำหรับการอัปเดตหน้าต่างซ่อนอยู่ในนั้น)
print img
พิมพ์อาร์เรย์ numpy ที่ถูกต้องไม่ใช่NoneType
วัตถุ
ฉันพบคำตอบที่เหมาะกับฉันที่นี่: http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html
หากคุณเรียกใช้เซสชัน ipython แบบโต้ตอบและต้องการใช้หน้าต่าง highgui ให้ทำ cv2.startWindowThread () ก่อน
รายละเอียด: HighGUI เป็นอินเทอร์เฟซที่เรียบง่ายในการแสดงภาพและวิดีโอจากรหัส OpenCV ควรจะง่ายพอ ๆ กับ:
import cv2
img = cv2.imread("image.jpg")
cv2.startWindowThread()
cv2.namedWindow("preview")
cv2.imshow("preview", img)
คุณต้องใช้หลังจากcv2.waitKey(0)
cv2.imshow("window",img)
แค่นั้นก็จะได้ผล
import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)
หากคุณใช้งานภายในคอนโซล Python ให้ดำเนินการดังนี้:
img = cv2.imread("yourimage.jpg")
cv2.imshow("img", img); cv2.waitKey(0); cv2.destroyAllWindows()
จากนั้นหากคุณกดEnterที่รูปภาพมันจะปิดภาพได้สำเร็จและคุณสามารถดำเนินการคำสั่งอื่น ๆ ได้
ฉันประสบปัญหาเดียวกัน ฉันพยายามอ่านรูปภาพจาก IDLE และพยายามแสดงโดยใช้cv2.imshow()
แต่หน้าต่างแสดงผลค้างและแสดงว่าpythonw.exe
ไม่ตอบสนองเมื่อพยายามปิดหน้าต่าง
โพสต์ด้านล่างให้คำอธิบายที่เป็นไปได้ว่าเหตุใดจึงเกิดขึ้น
" โดยพื้นฐานแล้วอย่าทำจาก IDLE เขียนสคริปต์และเรียกใช้จากเชลล์หรือสคริปต์โดยตรงหากอยู่ใน windows โดยตั้งชื่อด้วยนามสกุล. pyw และดับเบิลคลิกเห็นได้ชัดว่ามีความขัดแย้งระหว่างเหตุการณ์ของ IDLE เอง วนซ้ำและจากชุดเครื่องมือ GUI "
เมื่อฉันใช้imshow()
ในสคริปต์และเรียกใช้งานแทนที่จะเรียกใช้โดยตรงผ่าน IDLE มันใช้งานได้
เพิ่มcv2.waitKey(0)
ในตอนท้าย
สำหรับฉัน waitKey () ที่มีตัวเลขมากกว่า 0 ทำงาน
cv2.waitKey(1)
คุณมีชิ้นส่วนที่จำเป็นทั้งหมดในชุดข้อความนี้:
if cv2.waitKey(): cv2.destroyAllWindows()
ทำงานได้ดีสำหรับฉันใน IDLE
หากคุณยังไม่ได้ใช้งานคุณควรใส่
import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)
เป็นไฟล์เดียวและเรียกใช้
cv2.waitKey(0)
ข้อความ)
ไม่ต้องการวิธีการเพิ่มเติมใด ๆ หลังจากนั้นwaitKey(0)
(ตอบกลับสำหรับโค้ดด้านบน)
import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)
cv2.waitKey(0)
หน้าต่างจะปรากฏขึ้น -> คลิกที่หน้าต่างและคลิกที่ Enter หน้าต่างจะปิด
วิธีที่ 1:
รหัสต่อไปนี้ใช้ได้ผลสำหรับฉัน เพียงแค่เพิ่ม destroyAllWindows () ไม่ได้ปิดหน้าต่าง การเพิ่ม cv2.waitKey (1) อื่นในตอนท้ายได้ผล
im = cv2.imread("./input.jpg")
cv2.imshow("image", im)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)
เครดิต: https://stackoverflow.com/a/50091712/8109630
หมายเหตุสำหรับผู้เริ่มต้น:
วิธีที่ 2:
หากคุณต้องการแสดงบนสมุดบันทึก Jupyter
from matplotlib import pyplot as plt
import cv2
im = cv2.imread("./input.jpg")
color = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
plt.imshow(color)
plt.title('Image')
plt.show()
ฉันยังมีข้อผิดพลาด -215 ฉันคิดว่า imshow เป็นปัญหา แต่เมื่อฉันเปลี่ยน imread ให้อ่านในไฟล์ที่ไม่มีอยู่จริงฉันไม่พบข้อผิดพลาดที่นั่น ดังนั้นฉันจึงใส่ไฟล์รูปภาพในโฟลเดอร์ที่ใช้งานและเพิ่ม cv2.waitKey (0) และมันก็ใช้งานได้
หากคุณเลือกใช้ "cv2.waitKey (0)" ตรวจสอบให้แน่ใจว่าคุณได้เขียน "cv2.waitKey (0)" แทน "cv2.waitkey (0)" เนื่องจากตัวพิมพ์เล็ก "k" อาจทำให้โปรแกรมของคุณหยุดทำงานด้วย .
ข้อผิดพลาด: (-215) size.width> 0 && size.height> 0 ในฟังก์ชัน imshow
ข้อผิดพลาดนี้เกิดขึ้นเนื่องจากไม่พบรูปภาพ ดังนั้นจึงไม่ใช่ข้อผิดพลาดของฟังก์ชัน imshow
ฉันมีข้อผิดพลาด 215 เหมือนกันซึ่งฉันสามารถเอาชนะได้โดยให้เส้นทางแบบเต็มไปยังรูปภาพดังใน C: \ Folder1 \ Folder2 \ filename.ext