欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Python-OpenCV教程之圖像的位運算詳解

Python-OpenCV教程之圖像的位運算詳解

熱門標簽:無錫客服外呼系統一般多少錢 老人電話機器人 大連crm外呼系統 梅州外呼業務系統 高德地圖標注是免費的嗎 北京電信外呼系統靠譜嗎 百度地圖標注位置怎么修改 地圖標注視頻廣告 洪澤縣地圖標注

1、按位取反bitwise_not()

按位取反就是將數值根據每個bit位1變0,0變1,比如0xf0按位取反就變成了0x0f,如果是uint8類型的數據,取反前后的數據相加結果為0xff(255)。下面的例子將lena.jpg和opencv-logo.png分別按位取反:

import cv2

print('cv2.__version__:',cv2.__version__)
 
img1 = cv2.imread('..\\lena.jpg') 
img2 = cv2.imread('..\\opencv-logo.png' ) 
 
img_ret1 = cv2.bitwise_not(img1)
print('img1[161,199]:    ',img1[161,199])
print('img_ret1[161,199]:',img_ret1[161,199])
cv2.imshow('lena-not-juzicode',img_ret1)
 
img_ret2 = cv2.bitwise_not(img2)
print('img2[100,200]:    ',img2[100,200])
print('img_ret2[100,200]:',img_ret2[100,200])
cv2.imshow('logo-not-juzicode',img_ret2)
 
cv2.waitKey(0)

運行結果:

cv2.__version__: 4.5.2
img1[161,199]:     [109 105 201]
img_ret1[161,199]: [146 150  54]
img2[100,200]:     [  0   0 255]
img_ret2[100,200]: [255 255   0]

比如lena.jpg的像素點[161,199] B通道的值為109(0110 1101),取反后的值為146(1001 0010),轉換為二進制后觀察到每個bit為如果為0就變成1、如果為1就變成0:

上圖中左側lena這種圖像是不是有種似曾相識的感覺?能回憶起來是啥子東西的朋友就要暴露年齡了,二十年前流行的膠片相機,洗出來的底片就是這個樣子的。

取反還有很多應用的地方,比如做OCR文字識別的時候,因為一般的書籍是白紙黑字,背景是白色,而要分析識別的字卻是黑色,在做完二值化之后要識別的字是黑色的,如果直接做圖像切割,分離出來的就是背景“白紙”而不是目標對象“黑字”了,而做完取反處理后就能達到切割目標白色文字的效果。下圖是”白紙黑字“取反前后的對比:

bitwise_not()的入參中只有1個圖像實例作為輸入,而接下來介紹的與、或、異或等其他幾種邏輯運算則需要2個圖像實例(numpy數組)或者1個圖像實例和1個標量數據。和圖像的加減乘除運算一樣,當涉及到2個圖像實例時,也要求圖像的行列數一致。

2、按位與bitwise_and()、或bitwise_or()、異或bitwise_xor()

按位與、或、異或操作需要2個圖像對象、或者1個圖像對象和1個標量數據相互作用,接口形式如下:

dst = cv2.bitwise_or(src1, src2[, dst[, mask]] )
dst = cv2.bitwise_or(src1, src2[, dst[, mask]] )
dst = cv2.bitwise_or(src1, src2[, dst[, mask]] )

下面是2個圖像按位與、或、異或的例子:

import cv2

print('cv2.__version__:',cv2.__version__)
 
img1 = cv2.imread('..\\lena.jpg' )[0:300,0:300]
img2 = cv2.imread('..\\messi5.jpg' )[0:300,0:300]
img_ret1 = cv2.bitwise_and(img1,img2)
print('img1[161,199]:    ',img1[161,199])
print('img2[161,199]:    ',img2[161,199])
print('img_ret1[161,199]:',img_ret1[161,199])
cv2.imshow('and-juzicode',img_ret1) 
 
img_ret2 = cv2.bitwise_or(img1,img2)
print('img_ret2[161,199]:',img_ret2[161,199])
cv2.imshow('or-juzicode',img_ret2) 
 
img_ret3 = cv2.bitwise_xor(img1,img2)
print('img_ret3[161,199]:',img_ret3[161,199])
cv2.imshow('xor-juzicode',img_ret3) 
 
cv2.waitKey(0)

運行結果:

cv2.__version__: 4.5.2
img1[161,199]:     [109 105 201]
img2[161,199]:     [105  43  32]
img_ret1[161,199]: [105  41   0]
img_ret2[161,199]: [109 107 233]
img_ret3[161,199]: [  4  66 233]

2個圖像的按位操作和算術運算一樣,也要求2個圖像的大小一樣,通道數一樣。不同于算術運算數據類型不一樣時通過dtype聲明新生成圖像的數據類型,按位運算的接口中根本就沒有dtype參數,所以位運算中2個圖像的數據類型也必須一致。

同樣地按位運算也可以是一個圖像和1個標量,如果是標量數據類型,可以是1個單獨的數值或者是包含4個數值的四元組,這點和算術運算類似。和算術運算不同的是,如果是3通道的圖像,還可以用一個包含了3個數值的三元組和這個圖像做標量的位運算。

 下面的例子是一個3通道圖像和四元組、三元組、單個數值進行位運算的例子:

import cv2

print('cv2.__version__:',cv2.__version__)
 
img1 = cv2.imread('..\\lena.jpg' )[0:300,0:300]
img_ret1 = cv2.bitwise_and(img1,(0x3f,0x3f,0x3f,0))
print('img1[161,199]:    ',img1[161,199])
print('img_ret1[161,199]:',img_ret1[161,199])
cv2.imshow('and-juzicode',img_ret1) 
 
img_ret2 = cv2.bitwise_or(img1,(0x0f,0x0f,0x0f))
print('img_ret2[161,199]:',img_ret2[161,199])
cv2.imshow('or-juzicode',img_ret2) 
 
img_ret3 = cv2.bitwise_xor(img1,0xf0)
print('img_ret3[161,199]:',img_ret3[161,199])
cv2.imshow('xor-juzicode',img_ret3) 
 
cv2.waitKey(0)

運行結果:

cv2.__version__: 4.5.2
img1[161,199]:     [109 105 201]
img_ret1[161,199]: [45 41  9]
img_ret2[161,199]: [111 111 207]
img_ret3[161,199]: [157 105 201]

但是當圖像包含4通道時,因為處理標量數據時不會自動填充第4通道為0而直接報錯了,所以在處理4通道圖像時則必須使用四元組。一個好的編程習慣是不管圖像是多少通道的都使用四元組表示這個標量,如果不想對某些通道進行位運算,則用相應的全0或全f代替,比如一個3通道的uint8類型的圖像,只需要對2通道和0x33相與,構造的四元組就是(0xff,0x33,0xff,0xff)。

3、浮點類型圖像的位運算

前面的例子中我們都是以uint8類型為例進行說明的,當然16位、32位整型數據類型的圖像處理方法類似,但是如果一個圖像的數據類型是浮點類型時,位運算之后的結果會怎樣呢?

import numpy as np
import cv2

print('cv2.__version__:',cv2.__version__)
 
img1 = np.array([0.7,0.8,0.9,1.0,1.1,1.2,1.3],dtype=np.float32).reshape(1,7)
img_ret1 = cv2.bitwise_not(img1)
print('img1:',img1)
print('img_ret1:',img_ret1)

運行結果:

cv2.__version__: 4.5.2
img1: [[0.7 0.8 0.9 1.  1.1 1.2 1.3]]
img_ret1: [[-6.3999996 -5.5999994 -4.7999997 -3.9999998 -3.7999997 -3.5999997
  -3.3999999]]

從上面的運行結果看,浮點數按位取反后的數據和原始數據間對比,比較明顯的是符號發生了改變,但是二者的數值看起來已經沒有了明顯的對應關系了。

這是由浮點數據在內存中的存儲方式決定的,單精度32位浮點數按照1個符號位S+8個指數位E+23個有效數值位M構成。以0.7為例,在Python中用float.hex(0.7)計算的結果為0x1.6666666666666p-1,這樣取23個有效數值位M=0110 0110 0110 0110 0110 011,指數E=127-1=0x7E=0b 0111 1110,符號位S=0,所以完整的數值為0b 0 0111 1110 0110 0110 0110 0110 0110 011=0x3f333333,取反后就為0xc0cccccc,然后再反過來計算浮點數的值就為-6.3999996,同樣的方法可以計算其他浮點數二進制表示方法。

因為在Python中沒有直接將浮點數的二進制數值打印顯示的方法,我們可以用C語言中指針類型強制轉換的方式觀察、轉換浮點數的二進制值。下面這個例子中我們先定義了一個float型的數組,然后在循環中依次處理數組中的每個元素:先將該數值做(int*)強制類型轉換,再對該int類型的數據做取反操作,最后對取反得到后的int類型再做(float*)強制轉換為float型。

#include "stdio.h"
int main(void)
{
    float arr_f[7] = { 0.7,0.8,0.9,1.0,1.1,1.2,1.3 }; //定義浮點數數組
    int arr_i[7];               //存儲浮點數轉換后的int型
    int arr_i_not[7];           //存儲int型的按位取反
    float arr_f_not[7];         //arr_i_not轉換為浮點數
    for (int i = 0; i  7; i++) {
        int *t_i = (int*)(arr_f + i); //指針類型轉換為int型
        arr_i[i] = *t_i;
        arr_i_not[i] = ~arr_i[i];
        float *t_f = (float*)(arr_i_not + i);
        arr_f_not[i] = *t_f;
    }
 
    for (int i = 0; i  7;i++) {
        printf("%0.7f  ", arr_f[i]); 
        printf("%x  ", arr_i[i]);
        printf("%x  ", arr_i_not[i]);
        printf("%0.7f  \n", arr_f_not[i]);
    }
    return 0;
}

運行結果如下,第1列為原始數據,最后一列是按位取反后的數值,和OpenCV的bitwise_not()計算的結果一樣:

0.7000000  3f333333  c0cccccc  -6.3999996
0.8000000  3f4ccccd  c0b33332  -5.5999994
0.9000000  3f666666  c0999999  -4.7999997
1.0000000  3f800000  c07fffff  -3.9999998
1.1000000  3f8ccccd  c0733332  -3.7999997
1.2000000  3f99999a  c0666665  -3.5999997
1.3000000  3fa66666  c0599999  -3.3999999

在OpenCV內部對浮點類型的位運算實際上也是按照二進制數值進行的轉換,不過這種轉換方法沒有非常明確的圖像學含義,所以一般浮點類型的位運算幾乎很少使用。

到此這篇關于OpenCV-Python教程之圖像的位運算詳解的文章就介紹到這了,更多相關OpenCV-Python圖像的位運算內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python移位運算的實現
  • 簡單了解python的一些位運算技巧
  • 基礎的十進制按位運算總結與在Python中的計算示例
  • 初步認識Python中的列表與位運算符
  • 解析Python中的二進制位運算符
  • 詳細介紹Python語言中的按位運算符
  • 關于Python 位運算防坑指南

標簽:吉林 岳陽 清遠 泉州 洛陽 安慶 怒江 長春

巨人網絡通訊聲明:本文標題《Python-OpenCV教程之圖像的位運算詳解》,本文關鍵詞  Python-OpenCV,教程,之,圖像,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python-OpenCV教程之圖像的位運算詳解》相關的同類信息!
  • 本頁收集關于Python-OpenCV教程之圖像的位運算詳解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    黄色av网址在线观看| 色婷婷精品大视频在线蜜桃视频| 欧美私模裸体表演在线观看| 国产精品黄色在线观看| 国产成人综合亚洲网站| 欧美福利第一页| 久久一区二区三区国产精品| 日本不卡一二三| 在线视频 日韩| 欧美一区二区在线免费观看| 亚洲成人av一区| 国产精品麻豆入口| 欧美一区二区三区色| 日本欧美一区二区三区乱码| 800av在线播放| 日韩一区二区三区免费观看| 日韩精品亚洲专区| 9.1成人看片| 精品粉嫩aⅴ一区二区三区四区| 奇米888四色在线精品| 强伦人妻一区二区三区| 精品乱码亚洲一区二区不卡| 美女网站一区二区| 在线观看日本黄色| 国产精品水嫩水嫩| jlzzjlzz亚洲女人18| 在线观看免费一区| 亚洲国产精品精华液网站| 久久精品aⅴ无码中文字字幕重口| 欧美日韩国产高清一区二区 | 91国偷自产一区二区开放时间| 中文字幕在线一区| 91麻豆国产在线观看| 欧美日韩激情在线| 日韩影视精彩在线| 亚洲一级理论片| 亚洲三级理论片| 欧美午夜精品免费| 三级黄色免费观看| 中文字幕免费观看一区| av亚洲精华国产精华精华| 欧洲亚洲精品在线| 日韩精品亚洲一区| 亚洲色图第四色| 亚洲天天做日日做天天谢日日欢 | 欧美一区二区三区免费大片 | 偷拍女澡堂一区二区三区 | 在线免费观看污视频| 精品少妇一区二区三区| 国产成人精品免费视频网站| 91行情网站电视在线观看高清版| 午夜国产不卡在线观看视频| 亚洲图片另类小说| 亚洲男人电影天堂| 亚洲欧美日本一区| 国产精品―色哟哟| 影音先锋黄色资源| 国产精品美女一区二区三区| 日韩黄色一区二区| 久久久久久麻豆| 性色av浪潮av| 亚洲精品在线电影| 91在线视频播放地址| 日韩欧美一级精品久久| 成人亚洲一区二区一| 欧美人牲a欧美精品| 国产专区欧美精品| 欧美第一页在线观看| 欧美剧在线免费观看网站 | 国产一区二区调教| 欧洲一区二区三区免费视频| 免费一级欧美片在线观看| 污软件在线观看| 日日摸夜夜添夜夜添国产精品 | 国内精品自线一区二区三区视频| 色噜噜狠狠一区二区三区果冻| 日韩二区三区四区| 在线观看av一区| 国产成人亚洲综合a∨婷婷| 欧美乱妇15p| va亚洲va日韩不卡在线观看| 26uuu欧美| 亚洲视频天天射| 国产精品久久久久影院亚瑟| 欧美bbbbb性bbbbb视频| 亚洲欧美日韩久久精品| 精品国产aaa| 午夜视频一区二区| 国模无码国产精品视频| 韩国一区二区三区| 在线不卡的av| 乳色吐息在线观看| 国产精品久久久久一区二区三区共 | 欧美日韩色一区| 国产成人精品在线看| 欧美大白屁股肥臀xxxxxx| 韩国三级在线播放| 国产精品欧美综合在线| 婷婷色一区二区三区| 午夜欧美大尺度福利影院在线看| 欧美黑人猛猛猛| 国产九色精品成人porny| 欧美电视剧在线看免费| 国产在线观看免费播放| 亚洲婷婷综合久久一本伊一区| 亚洲精品一区二区三区在线播放| 美女一区二区视频| 日韩一区和二区| 亚洲美女在线播放| 亚洲一二三区在线观看| 色诱视频网站一区| 成人免费毛片app| 国产精品美女一区二区三区| 国产又黄又粗又猛又爽的| 美国十次综合导航| 日韩欧美国产精品一区| 日韩av手机在线播放| 亚洲一二三区在线观看| 欧美日韩一卡二卡| 国产老头和老头xxxx×| 亚洲视频一区二区在线| 色综合久久中文字幕| 精品国产露脸精彩对白| 黄色录像a级片| 日韩电影在线观看一区| 这里只有精品免费| 中文字幕无码人妻少妇免费| 日韩精品一级二级| 日韩视频在线永久播放| 丰满圆润老女人hd| 蜜桃91丨九色丨蝌蚪91桃色| 精品国产sm最大网站免费看| 亚洲码无人客一区二区三区| 久久99精品久久久久久| 欧美r级在线观看| 无码少妇一区二区| 国产福利一区在线| 国产精品国产a级| 色先锋资源久久综合| av在线播放不卡| 一区二区三区四区蜜桃| 欧美日韩免费观看一区三区| 图片区偷拍区小说区| 首页亚洲欧美制服丝腿| 欧美电影免费观看高清完整版在线 | 国产又黄又大久久| 国产欧美精品区一区二区三区| 天堂а√在线中文在线鲁大师| 国产91丝袜在线18| 亚洲欧美日韩国产综合| 欧美日韩国产一区| 日本丰满少妇裸体自慰| 麻豆成人av在线| 国产三级一区二区三区| 东方av正在进入| 丰满少妇中文字幕| 欧美aa在线视频| 久久精品亚洲乱码伦伦中文| 久久国产美女视频| 亚洲精品一区二区18漫画| 日本欧美久久久久免费播放网| 久久网这里都是精品| 国产在线一卡二卡| 苍井空张开腿实干12次| 喷水一区二区三区| 国产精品久久久久久福利一牛影视| 91久久免费观看| 在线免费观看污视频| 国产一区二区按摩在线观看| 日韩美女啊v在线免费观看| 制服丝袜中文字幕一区| 自拍偷拍你懂的| 韩国一区二区三区四区| 久久99热99| 亚洲蜜臀av乱码久久精品蜜桃| 制服丝袜国产精品| 久久精品一区二区三区四区五区 | 成人午夜福利一区二区| 大桥未久av一区二区三区中文| 亚洲与欧洲av电影| 久久婷婷久久一区二区三区| 色欧美片视频在线观看在线视频| 又黄又爽的网站| 成人小视频在线观看| 婷婷综合五月天| 国产精品毛片a∨一区二区三区| 欧美日韩视频不卡| 91香蕉视频网| 青青草视频成人| 波多野结衣中文字幕一区二区三区| 三级久久三级久久久| 中文字幕一区二区三区四区| 91精品欧美一区二区三区综合在| 精品无码一区二区三区蜜臀| 午夜视频在线观看国产| gogogo免费视频观看亚洲一| 美女视频网站久久| 亚洲激情在线激情| 日本一区二区视频在线| 日韩欧美精品在线视频|