[英]how to increase brightness of a piece of a rgb image without overfolow?
[英]Increase image brightness without overflow
嘗試提高圖像亮度時遇到問題。
這是原始圖像:
我想要的圖像是這樣的:
現在使用以下代碼增加亮度:
image = cv2.imread("/home/wni/vbshare/tmp/a4_index2.png",0)
if sum(image[0])/len(image[0])<200:
new = np.where((255-image)<image,255,image*2)
else:
new = image
return new
而且,我得到了以下圖像:
所以,似乎某些點的亮度溢出。
我試圖將閾值從200更改為其他數字,例如125,100,140等。但是,圖像亮度幾乎保持相同的暗或溢出。
ENV:
Python:2.7.10
Opencv:3.2.0
對此有任何建議表示贊賞。
謝謝。
這是我用一種清理特定圖像的簡單算法的鏡頭。 隨意玩它並進一步調整以獲得所需的結果。
注意 :顯示的代碼應該適用於OpenCV的2.4.x和3.x分支。
將輸入圖像加載為灰度。
img = cv2.imread('paper.jpg',0)
擴大圖像,以擺脫文本。 此步驟有助於保留條形碼。
dilated_img = cv2.dilate(img, np.ones((7,7), np.uint8))
中位數使用適當大小的內核模糊結果以進一步抑制任何文本。
這應該會給我們一個相當不錯的背景圖像,其中包含所有陰影和/或變色。
bg_img = cv2.medianBlur(dilated_img, 21)
計算我們剛剛獲得的原始和背景之間的差異。 相同的位將是黑色(接近0差異),文本將是白色(大差異)。
因為我們想要白色的黑色,我們反轉結果。
diff_img = 255 - cv2.absdiff(img, bg_img)
標准化圖像,以便我們使用完整的動態范圍。
norm_img = diff_img.copy() # Needed for 3.x compatibility
cv2.normalize(diff_img, norm_img, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)
在這一點上,我們仍然有一些灰色的紙張。 我們可以將其截斷,並重新標准化圖像。
_, thr_img = cv2.threshold(norm_img, 230, 0, cv2.THRESH_TRUNC)
cv2.normalize(thr_img, thr_img, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)
完成...
好吧,至少對我來說;)你可能想要裁剪它,並做任何你想要的后處理。
注意:獲得差異圖像后,可能需要切換到更高的精度(16位int或浮點數),以便最大限度地減少重復歸一化中的累積舍入誤差。
你需要的是閾值 。 這將允許您將非常暗的所有內容設置為純白色,並將非常暗的內容設置為直黑色(或任何其他顏色)。 這應該讓你開始:
cutoff_val = 100 # everything above this is set to set_color
set_color = 255
ret,thresh_img = cv2.threshold(image,cutoff_val,set_color,cv2.THRESH_BINARY)
在您使用它之后,您可以使用自適應閾值處理獲得更好的結果。
看到這個偉大的教程基本上做你想要的 - 和獎金,它包括一個關於翹曲的教程,以獲得紙張的矩形區域!
編輯:我的圖像結合了閾值處理和自適應閾值處理,結果非常好。
cutoff_val = 150 # everything above this is set to the cutoff val
set_color = 255 # if
ret,thresh_img = cv2.threshold(image,cutoff_val,set_color,cv2.THRESH_TRUNC)
window_sz = 3
thresh_img2 = cv2.adaptiveThreshold(thresh_img,set_color,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY,window_sz,2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.