在OpenCV裡實現算術編碼2

2021-09-29 19:24:36 字數 885 閱讀 4487

由於前面算術編碼是採用浮點數,而由於浮點數的精度有限,所以要表示的位數有限,導致可以壓縮的內容不多。那麼就需要採用二進位制的方式來表示小數,這樣就可以表示很長的小數了。不過在計算的過程中會出現相互接近的現象,所以增加了四分之一和四分之三的處理,這樣才可以避開對半時不能判斷的現象。可以採用python**實現如下:

#python 3.7.4,opencv4.1

#蔡軍生

#import numpy as np

import cv2

from matplotlib import pyplot as plt

#code_value_bits = 16

frequency_bits = 14

max_code = (int(1) << code_value_bits) - 1

max_freq = (int(1) << frequency_bits) - 1

one_fourth = int(1) << (code_value_bits - 2)

one_half = 2 * one_fourth

three_fourths = 3 * one_fourth

cumulative_frequency = [i for i in range(258)]

class prob():

def __init__(self,low, high, count):

self.low = low

self.high = high

self.count = count

class modela():

def __init__(self):

self.m_frozen = false

#

在OpenCV裡實現均值平滑2

通過均值可以實現平滑的效果,不過這樣採用卷積的方式來計算還是不夠快,即使是使用了分離的卷積計算。由於均值的特殊性,可以針對這種卷積計算進行優化。我們知道計算均值就是把所有元素加到一起,然後再除以個數。由於影象很大,而卷積運算元很小,那麼就相當於乙個視窗不斷地滑動在影象上,並且計算這個視窗的和,那麼有...

在OpenCV裡實現霍夫直線檢測2

有了這個直線檢測,就可以進行車道識別了,下面先來對前面提到的車道 做高斯平滑 out cv2.gaussianblur image,5,5 1.5 這時影象平滑之後,再做形態學的閉運算,以便把小黑點去掉 kernel cv2.getstructuringelement cv2.morph rect,...

在OpenCV裡實現開運算

前面學習腐蝕和膨脹演算法,並且深刻地認識到它們的特性以及作用。如果由這兩種組合出來的運算又有什麼樣的不同呢?比如乙個影象先腐蝕後膨脹的操作,會有什麼結果呢?因為腐蝕是把白色變小,膨脹又是把白色變大,是否會保持原圖不變呢?帶著這些問題來研究一下先腐蝕後膨脹的演算法,我們把這樣的演算法叫做開運算,在數學...