opencv
assertion_error
ai_generated
true
cv::error: (-215:Assertion failed) !winname.empty() && namedWindow(winname, flags) == 0 in function 'imshow'
ID: opencv/highgui-window-name-duplicate
85%Fix Rate
82%Confidence
1Evidence
2023-04-28First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 4.5.5 | active | — | — | — |
| 4.6.0 | active | — | — | — |
| 4.7.0 | active | — | — | — |
| 4.8.1 | active | — | — | — |
| 4.9.0 | active | — | — | — |
Root Cause
imshow() is called with an empty window name or a window name that conflicts with an existing named window due to duplicate creation without proper flags.
generic中文
imshow() 调用时使用了空窗口名称,或者由于未使用正确标志重复创建而导致窗口名称冲突。
Official Documentation
https://docs.opencv.org/4.x/d7/dfc/group__highgui.htmlWorkarounds
-
95% success Always provide a non-empty, unique window name: cv::imshow("Display Window", img); or use cv::namedWindow("MyWindow", cv::WINDOW_AUTOSIZE); cv::imshow("MyWindow", img);
Always provide a non-empty, unique window name: cv::imshow("Display Window", img); or use cv::namedWindow("MyWindow", cv::WINDOW_AUTOSIZE); cv::imshow("MyWindow", img); -
85% success Check if window exists before creating: if (cv::getWindowProperty("MyWindow", cv::WND_PROP_VISIBLE) < 0) { cv::namedWindow("MyWindow", cv::WINDOW_AUTOSIZE); }
Check if window exists before creating: if (cv::getWindowProperty("MyWindow", cv::WND_PROP_VISIBLE) < 0) { cv::namedWindow("MyWindow", cv::WINDOW_AUTOSIZE); }
中文步骤
Always provide a non-empty, unique window name: cv::imshow("Display Window", img); or use cv::namedWindow("MyWindow", cv::WINDOW_AUTOSIZE); cv::imshow("MyWindow", img);Check if window exists before creating: if (cv::getWindowProperty("MyWindow", cv::WND_PROP_VISIBLE) < 0) { cv::namedWindow("MyWindow", cv::WINDOW_AUTOSIZE); }
Dead Ends
Common approaches that don't work:
-
Calling namedWindow with a different flag like WINDOW_NORMAL every time
70% fail
If the window name already exists, namedWindow returns non-zero but doesn't fail; imshow still sees the conflict.
-
Using imshow without namedWindow at all
80% fail
imshow internally calls namedWindow, so the same assertion can trigger if the name is empty.
-
Destroying window with destroyWindow before each imshow
85% fail
If the window name is empty, destroyWindow does nothing and imshow still fails.