python opencv 4.5.5 cv :: getTrackBarpos错误发生在新版本中

发布于 2025-01-25 20:24:48 字数 3085 浏览 1 评论 0原文

我在下面遇到了一个错误:

    File "C:\Users\deniz\OneDrive\Desktop\Bitirme\2.dönem\Program\Composite Project22.py", line 814, in kızart
    kırmızı = cv.getTrackbarPos('Red Area Ratio','Filter')
cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:862: error: (-215:Assertion failed) trackbar in function 'cv::getTrackbarPos'

Traceback (most recent call last):
  File "C:\Users\deniz\OneDrive\Desktop\Bitirme\2.dönem\Program\Composite Project22.py", line 816, in kızart
    contrast = cv.getTrackbarPos("Contrast","Filter")
cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:862: error: (-215:Assertion failed) trackbar in function 'cv::getTrackbarPos'

255 127 127

我的主要问题是下面的代码与我的python旧设置效果很好。但是,我购买了新的SSD,并安装了新版本的Python和OpenCV。我在Stackoverflow上搜索了此主题,有些人解决了由错别字引起的此问题,但我的旧版本设置中没有任何错别字或其他错误。该代码也可以在新设置上工作,但功能确实可以正常工作,但不准确地像旧版本一样,并且不会以正确的形式输出图像。

def kızart(kırmızı=255,brightness=255,contrast=127):#kırmızı=255,brightness=255,contrast=127
                global effect
                global fotoolcer
                global label1
                global test
                global image1
                global effect

                brightness = cv.getTrackbarPos('Brightness','Filter')

                kırmızı = cv.getTrackbarPos('Red Area Ratio','Filter')

                contrast = cv.getTrackbarPos('Contrast','Filter')
                print(brightness,kırmızı,contrast)
                effect = pixcont(image,kırmızı,brightness,contrast)
                cv.imshow('Filtered Image', effect)
                cv.imwrite("Filtered Image.png",effect)

这两个代码称为“ pixcont”之间有一个函数。

if __name__ == '__main__':
                # The function imread loads an image
                # from the specified file and returns it.
                if vf_iter_counter==1:
                    original = cv.imread(vf_iter_basename)

                elif vf_iter_counter==0:
                    original = cv.imread(basename)

                # Making another copy of an image.

                image = original.copy()

                # The function namedWindow creates a
                # window that can be used as a placeholder
                # for images.

                cv.namedWindow('Filter')

                # The function imshow displays an

                # image in the specified window.

                cv.imshow('Filter', original)

                # createTrackbar(trackbarName,
                # windowName, value, count, onChange)
                # Brightness range -255 to 255
                # Contrast range -127 to 127
                cv.createTrackbar('Brightness','Filter', 255,2*255,kızart)
                cv.createTrackbar('Red Area Ratio','Filter', 127,255,kızart)
                cv.createTrackbar('Contrast','Filter',127, 2 * 127,kızart)

            cv.waitKey(0)

它会流利地读取跟踪栏,并且可以得到跟踪栏的结果并打印它们。在旧设置中,该功能在更改比例尺之前,该功能不会启动该过程。在此版本中,它会自动启动它。我不了解真正的问题。 PS:ı是否必须在系统路径中添加OpENCV?我不记得我做到了。 谢谢。

I got an error down below:

    File "C:\Users\deniz\OneDrive\Desktop\Bitirme\2.dönem\Program\Composite Project22.py", line 814, in kızart
    kırmızı = cv.getTrackbarPos('Red Area Ratio','Filter')
cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:862: error: (-215:Assertion failed) trackbar in function 'cv::getTrackbarPos'

Traceback (most recent call last):
  File "C:\Users\deniz\OneDrive\Desktop\Bitirme\2.dönem\Program\Composite Project22.py", line 816, in kızart
    contrast = cv.getTrackbarPos("Contrast","Filter")
cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:862: error: (-215:Assertion failed) trackbar in function 'cv::getTrackbarPos'

255 127 127

My main problem is the code below worked fine with my old setup for python. However, ı bought a new SSD and installed the new version of python and OpenCV. I searched this topic on StackOverflow and some people fixed this problem caused by a typo but ı do not have any typos or other errors in my old version setup. Facts that this code can work on the new setup as well but functions do work but not accurately like the old version and do not output the image in the correct form.

def kızart(kırmızı=255,brightness=255,contrast=127):#kırmızı=255,brightness=255,contrast=127
                global effect
                global fotoolcer
                global label1
                global test
                global image1
                global effect

                brightness = cv.getTrackbarPos('Brightness','Filter')

                kırmızı = cv.getTrackbarPos('Red Area Ratio','Filter')

                contrast = cv.getTrackbarPos('Contrast','Filter')
                print(brightness,kırmızı,contrast)
                effect = pixcont(image,kırmızı,brightness,contrast)
                cv.imshow('Filtered Image', effect)
                cv.imwrite("Filtered Image.png",effect)

There is a function between these two code called "pixcont".

if __name__ == '__main__':
                # The function imread loads an image
                # from the specified file and returns it.
                if vf_iter_counter==1:
                    original = cv.imread(vf_iter_basename)

                elif vf_iter_counter==0:
                    original = cv.imread(basename)

                # Making another copy of an image.

                image = original.copy()

                # The function namedWindow creates a
                # window that can be used as a placeholder
                # for images.

                cv.namedWindow('Filter')

                # The function imshow displays an

                # image in the specified window.

                cv.imshow('Filter', original)

                # createTrackbar(trackbarName,
                # windowName, value, count, onChange)
                # Brightness range -255 to 255
                # Contrast range -127 to 127
                cv.createTrackbar('Brightness','Filter', 255,2*255,kızart)
                cv.createTrackbar('Red Area Ratio','Filter', 127,255,kızart)
                cv.createTrackbar('Contrast','Filter',127, 2 * 127,kızart)

            cv.waitKey(0)

It reads the trackbar fluently and ı can get the trackbar results and print them.In the old setup, the function does not start the process until ı changed the scale bar. In this version it automatically starts it.I don't understand the real problem.
P.S.:Do ı have to add OpenCV in the system path? I don't remember ı did that.
Thx.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心安伴我暖 2025-02-01 20:24:48

我根据Berak的建议找到解决方案。我在段循环中拆分并运行该功能。

不幸的是,如今,CreateTrackBar()已经调用了您的Kizart回调函数,其中仅创建了3个跟踪栏中的1个。为所有跟踪栏使用相同的回调的坏主意。也许使用主循环而不是回调函数 -
休息

解决方案:

            def dead(x):
                pass
            cv.namedWindow('Filter')
            cv.createTrackbar('Brightness','Filter', 255,2*255,dead)
            cv.createTrackbar('Red Area Ratio','Filter', 127,255,dead)
            cv.createTrackbar('Contrast','Filter',127, 2 * 127,dead)
            while True:
                if vf_iter_counter==1:
                    original = cv.imread(vf_iter_basename)

                elif vf_iter_counter==0:
                    original = cv.imread(basename)
                
                image = original.copy()
                #cv.resizeWindow('Filter',hgt,wid)
                k = cv.waitKey(1) & 0xFF
                if k == 27:
                    break

                kırmızı = cv.getTrackbarPos('Red Area Ratio','Filter')
                brightness = cv.getTrackbarPos('Brightness','Filter')
                contrast = cv.getTrackbarPos('Contrast','Filter')
                effect = pixcont(image,kırmızı,brightness,contrast)

                cv.imshow('Filter',effect)

                print(kırmızı,brightness,contrast)

            cv.destroyAllWindows()

I find the solution according to Berak's advice. I split and run the function in the while loop.

unfortunately nowadays, createTrackbar() already calls your kizart callback function, where only 1 of 3 trackbars are already created. bad idea to use the same callback for all trackbars. maybe use the main loop instead of a callback function –
break

Solution:

            def dead(x):
                pass
            cv.namedWindow('Filter')
            cv.createTrackbar('Brightness','Filter', 255,2*255,dead)
            cv.createTrackbar('Red Area Ratio','Filter', 127,255,dead)
            cv.createTrackbar('Contrast','Filter',127, 2 * 127,dead)
            while True:
                if vf_iter_counter==1:
                    original = cv.imread(vf_iter_basename)

                elif vf_iter_counter==0:
                    original = cv.imread(basename)
                
                image = original.copy()
                #cv.resizeWindow('Filter',hgt,wid)
                k = cv.waitKey(1) & 0xFF
                if k == 27:
                    break

                kırmızı = cv.getTrackbarPos('Red Area Ratio','Filter')
                brightness = cv.getTrackbarPos('Brightness','Filter')
                contrast = cv.getTrackbarPos('Contrast','Filter')
                effect = pixcont(image,kırmızı,brightness,contrast)

                cv.imshow('Filter',effect)

                print(kırmızı,brightness,contrast)

            cv.destroyAllWindows()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文