Çözüldü Python OpenCV açtığım kamera kapanmıyor?

  • Konuyu başlatan xbea
  • Başlangıç Tarihi
  • Mesaj 8
  • Görüntüleme 2.118
Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
1 Mayıs 2020
Mesajlar
5.671
Makaleler
1
Çözümler
16
Arkadaşlar yeni yeni Python ile Opencv çalışmaya başladım ve ilk defa kamera açabildim. Ancak kamera görüntüyü sorunsuz gösterirken kapatma tuşuna tıkladığımda kapanmıyor. Kodlar aşağıda yardımcı olabilen herkese şimdiden teşekkürler.

Not: "q" tuşuna basınca da kapanmıyor.

Python:
import cv2
import numpy as np

kamera= cv2.VideoCapture(0)

while True:
    ret,goruntu=kamera.read()

    cv2.imshow("xbea star", goruntu)

    if cv2.waitKey(20) & 0xFF == ('q'):
        break


kamera.release()

cv2.destroyAllWindows()

@Vavien. hocam bakabilir misiniz?
 
Son düzenleme:
Çözüm
Merhaba,

Aşağıdaki kodu bir sonraki satırdaki şekliyle değiştirirseniz, "q" tuşuna bastıktan sonra çıkış yapacaktır.

Değiştirilmesi gereken kısım.
if cv2.waitKey(20) & 0xFF == ('q'):

Olması gereken şekli.
if (cv2.waitKey(20) == ord('q')): #if daha derli toplu olsun diye dışına parantez ekledim.
Merhaba,

Aşağıdaki kodu bir sonraki satırdaki şekliyle değiştirirseniz, "q" tuşuna bastıktan sonra çıkış yapacaktır.

Değiştirilmesi gereken kısım.
if cv2.waitKey(20) & 0xFF == ('q'):

Olması gereken şekli.
if (cv2.waitKey(20) == ord('q')): #if daha derli toplu olsun diye dışına parantez ekledim.
 
Çözüm
Merhaba,

Aşağıdaki kodu bir sonraki satırdaki şekliyle değiştirirseniz, "q" tuşuna bastıktan sonra çıkış yapacaktır.

Değiştirilmesi gereken kısım.
if cv2.waitKey(20) & 0xFF == ('q'):

Olması gereken şekli.
if (cv2.waitKey(20) == ord('q')): #if daha derli toplu olsun diye dışına parantez ekledim.
Hocam izlediğim video da ord eklemeden yapmıştı ve çalışmıştı da aklıma takıldı; güncelleme filan mı geldi de bende çalışmadı? Çünkü video 2020 yılına aitte kafam karıştı biraz kusura bakmayınız. Çok teşekkür ederim bu arada çalıştı dediğiniz gibi yapınca.
 
Hocam izlediğim video da ord eklemeden yapmıştı ve çalışmıştı da aklıma takıldı; güncelleme filan mı geldi de bende çalışmadı? Çünkü video 2020 yılına aitte kafam karıştı biraz kusura bakmayınız. Çok teşekkür ederim bu arada çalıştı dediğiniz gibi yapınca.
Ord unicode karşılığını veriyor size. 0xFF bir bit maskeleme çözümüdür, ancak işletim sistemlerinin farklı olması veya işlemci tipinin farklı olmasından dolayı yapılan maskelemelerde hatalar çıkabiliyor. Ord fonksiyonunu unicode tablosunda bulunan tüm karakterler için kullanabilirsiniz. 2 byte olanları sadece kullanmasanız sizin için daha kolay olabilir (2 byte olan karakterler tüm klavyelerde bulunmuyor).
 
Ord unicode karşılığını veriyor size. 0xFF bir bit maskeleme çözümüdür, ancak işletim sistemlerinin farklı olması veya işlemci tipinin farklı olmasından dolayı yapılan maskelemelerde hatalar çıkabiliyor. Ord fonksiyonunu unicode tablosunda bulunan tüm karakterler için kullanabilirsiniz. 2 byte olanları sadece kullanmasanız sizin için daha kolay olabilir (2 byte olan karakterler tüm klavyelerde bulunmuyor).
Hocam ben daha çok yeniyim 😅, dediklerinizden pek bir şey anlamadım😀. Ancak dediyseniz doğrudur. Valla şöyle sizin gibi konuşabilmek için çok çalışmam gerekecek sanırım, Türkçe çevirisi varsa yazdığınızın anlamak isterim hocam 😆.
 
1 Byte = 8 bit oluyor. Bitler sadece 1 ve 0 değerlerini alıyorlar. Bilgisayardaki işlemci bir işlemi gerçekleştirmek için 1 byte veriyi Ram'den çağırıyor.

cv2.waitKey(20) --> Bu kısım Ram'den 4 byte veri çağırıyor.
Bit olarak incelediğimizde örneğin aşağıdaki veri geliyor.
01010101 01010101 01010101 01010101

& 0xFF --> Bu kısım soldan ilk 3 byte içerisindeki tüm bitleri 0 kabul ediyor.
Örnek:
00000000 00000000 00000000 01010101

Akabinde bizde son byte kalıyor. Bu byte'ın q'nun karşılığına gelen kısımla eşit olup olmadığını kontrol ediyoruz.
Eğer q = 01010101 ise sonuç doğru oluyor ve döngüden çıkıyoruz.

Yukarıda daha kolaylık olsun diye "==" kullandık aslında birebir eşleşmeden ziyade son değeri kontrol etmesini sağladık.

Tamamen örnek olarak veriyorum bu kısmı:

Biz & 0xFF kullansaydık ve işletim sistemimizde q'nun bit olarak karşılığı 2 byte olsaydı, bu durumda q harfine bastığımızda 01010101 01010101 bitleri gelecekti. Kullandığımız fonksiyon ile cv2.waitKey(20)'den sadece 01010101 gelecekti. Bu durumda eşitlik sağlanamayacağı için döngümüz devam edecekti.
 
1 Byte = 8 bit oluyor. Bitler sadece 1 ve 0 değerlerini alıyorlar. Bilgisayardaki işlemci bir işlemi gerçekleştirmek için 1 byte veriyi Ram'den çağırıyor.

cv2.waitKey(20) --> Bu kısım Ram'den 4 byte veri çağırıyor.
Bit olarak incelediğimizde örneğin aşağıdaki veri geliyor.
01010101 01010101 01010101 01010101

& 0xFF --> Bu kısım soldan ilk 3 byte içerisindeki tüm bitleri 0 kabul ediyor.
Örnek:
00000000 00000000 00000000 01010101

Akabinde bizde son byte kalıyor. Bu byte'ın q'nun karşılığına gelen kısımla eşit olup olmadığını kontrol ediyoruz.
Eğer q = 01010101 ise sonuç doğru oluyor ve döngüden çıkıyoruz.

Yukarıda daha kolaylık olsun diye "==" kullandık aslında birebir eşleşmeden ziyade son değeri kontrol etmesini sağladık.

Tamamen örnek olarak veriyorum bu kısmı:

Biz & 0xFF kullansaydık ve işletim sistemimizde q'nun bit olarak karşılığı 2 byte olsaydı, bu durumda q harfine bastığımızda 01010101 01010101 bitleri gelecekti. Kullandığımız fonksiyon ile cv2.waitKey(20)'den sadece 01010101 gelecekti. Bu durumda eşitlik sağlanamayacağı için döngümüz devam edecekti.
Hocam hayran kaldım, yanlış anlamayın bu kadar bilgiyi nasıl öğrendiniz? Yani neler çalıştınız da bu kadar bilgiyi/veriyi öğrenme şansına eriştiniz? Gerçekten bende öğrenmek isterim....
 
Ne kadar hızlı programa ihtiyaç olursa o kadar makine diline yaklaşmak gerekiyor. Sizin de daha hızlı programlara ihtiyacınız olacaktır ya da kullandığınız dil ihtiyaçlarınızın tamamını karsilamadiginda makine diline yaklaşacaksiniz. O zaman araştırma yapıp size uygun mimari gelistirmeniz gerekecektir.
 
Ne kadar hızlı programa ihtiyaç olursa o kadar makine diline yaklaşmak gerekiyor. Sizin de daha hızlı programlara ihtiyacınız olacaktır ya da kullandığınız dil ihtiyaçlarınızın tamamını karsilamadiginda makine diline yaklaşacaksiniz. O zaman araştırma yapıp size uygun mimari gelistirmeniz gerekecektir.
Anladım hocam o zaman siz baya derin çalışıyorsunuz, ben şu python'ı bir öğreneyim ilerleyeceğim daha merak etmeyin.
 

Technopat Haberler

Geri
Yukarı