В чем смысл строки & ldquo; k = cv2.waitKey (30) & amp; 0xff & Rdquo; в python, в частности, 0xff? [Дубликат]

Сделать это без обслуживания

http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion

Если вы так серьезно относитесь к тому, чтобы делать это с помощью службы mediaplayer

Intent svc=new Intent(this, BackgroundSoundService.class);
startService(svc);

public class BackgroundSoundService extends Service {
    private static final String TAG = null;
    MediaPlayer player;
    public IBinder onBind(Intent arg0) {

        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        player = MediaPlayer.create(this, R.raw.idil);
        player.setLooping(true); // Set looping
        player.setVolume(100,100);

    }
    public int onStartCommand(Intent intent, int flags, int startId) {
        player.start();
        return 1;
    }

    public void onStart(Intent intent, int startId) {
        // TO DO
    }
    public IBinder onUnBind(Intent arg0) {
        // TO DO Auto-generated method
        return null;
    }

    public void onStop() {

    }
    public void onPause() {

    }
    @Override
    public void onDestroy() {
        player.stop();
        player.release();
    }

    @Override
    public void onLowMemory() {

    }
}

Пожалуйста, позвоните в эту службу в манифест. Убедитесь, что в конце .BackgroundSoundService string


19
задан Dora 12 February 2016 в 22:45
поделиться

6 ответов

0xFF - это шестнадцатеричная константа, которая является 11111111 в двоичном формате. Используя побитовое И (&) с этой константой, он оставляет только последние 8 бит оригинала (в этом случае, независимо от cv2.waitKey(0)).

8
ответ дан Kevin W. 16 August 2018 в 02:52
поделиться
  • 1
    будет ли это не 10000000 в двоичном формате, а от 2 до 8 (= 256)? Также я не уверен, что вы имели в виду. У меня есть waitkey, чтобы сделать событие certian, получив ключевой вклад. Вы получаете ключевой ввод, конвертируете его в ASCII и делаете что-то с ним. Кажется, что всегда при использовании waitkey в opencv вы использовали бы 0xFF, чего я не получу. – Dora 13 February 2016 в 20:18

Честно, в этом случае вам не нужно 0xFF. Если вы сделали cv2.waitkey(0) == ord(q), это все равно будет работать. 0xFF используется только для маскировки последней 8bits последовательности, а ord () любого символа клавиатуры не будет больше 255. Вы можете ссылаться на эту таблицу ASCII , чтобы найти числовую значения любого символа клавиатуры.

2
ответ дан Daniel Copley 16 August 2018 в 02:52
поделиться

ord (c) возвращает целое число, представляющее кодовую точку Юникода символа (с), когда аргумент является объектом юникода, или значением байта, когда аргумент является 8-битовой строкой.

В случае 64-битных систем значение cv2.waitKey (0) является побитовым AND (& amp;) с шестнадцатеричной константой 0xFF (которая представляет собой двоичную строку 11111111 ), что приводит к последним 8 битам. Таким образом, проверяя eqality с ord (c).

2
ответ дан jaykay 16 August 2018 в 02:52
поделиться

cv2.waitKey () возвращает 32-битное целочисленное значение (может зависеть от платформы). Ввод ключа находится в ASCII, который представляет собой 8-битное целочисленное значение. Таким образом, вы только заботитесь об этих 8 бит и хотите, чтобы все остальные биты были равны 0. Этого можно достичь с помощью:

cv2.waitKey(0) & 0xFF
11
ответ дан johnny b 16 August 2018 в 02:52
поделиться

Также важно отметить, что ord ('q') может возвращать разные числа, если активирован NumLock (возможно, это также происходит с другими клавишами). Например, при нажатии c код:

key = cv2.waitKey(10) 
print(key) 

возвращает

 1048675 when NumLock is activated 
 99 otherwise

Преобразование этих двух чисел в двоичный файл можно увидеть:

1048675 = 100000000000001100011
99 = 1100011

Как мы видим, последний байт идентичен. Затем необходимо взять только этот последний байт, поскольку остальное вызвано из-за состояния NumLock. Таким образом, мы выполняем:

key = cv2.waitKey(33) & 0b11111111  
# 0b11111111 is equivalent to 0xFF

, а значение ключа останется прежним, и теперь мы можем сравнить его с любой клавишей, которую мы хотели бы задать, например, ваш вопрос

if key == ord('q'):
24
ответ дан Sheila 16 August 2018 в 02:52
поделиться
0
ответ дан Kuldeep Thakre 29 October 2018 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: