目錄
- 1. 函式定義
- 2. 工作原理
- 3. 示例
cv::bitwise_not()
是 OpenCV 中用於對影像或矩陣進行按位取反操作的函式。它將輸入影像的每個畫素的值進行按位反轉,生成輸出影像。按位取反是對每個位進行反轉,即將二進位制數中的 0 變為 1,1 變為 0。
1. 函式定義
void cv::bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray());
引數:
-
src
:輸入影像或矩陣,型別可以是 8 位、16 位或 32 位整型、浮點型(單通道或多通道)。輸入影像必須是單通道或多通道的矩陣。每個畫素的每個位都會被反轉。 -
dst
:輸出影像或矩陣,大小和型別與輸入影像src
相同。即dst
是按位反轉後的結果影像。 -
mask
(可選):操作的掩碼影像。型別為 8 位單通道影像。如果提供了mask
,則只有掩碼中非零值對應的位置會被進行取反操作,其他地方保持不變。如果不提供掩碼,整個影像的所有畫素都會被反轉。
2. 工作原理
cv::bitwise_not()
會對輸入影像的每個畫素值執行按位取反操作。如果輸入影像是灰度影像,畫素值為 0 到 255 的範圍,取反後每個畫素的值會變為 255 - 原畫素值
。對於彩色影像,函式會對每個通道分別進行按位取反操作。
-
灰度影像的例子:
對於灰度影像,畫素值為 8 位無符號整型 (0 到 255)。假設某個畫素值是 100,它的二進位制形式是01100100
,取反後變為10011011
,即255 - 100 = 155
。 -
彩色影像的例子:
對於彩色影像,cv::bitwise_not()
會對每個通道(R、G、B)分別進行操作。例如,某個畫素值為(100, 150, 200)
,取反後變為(255-100, 255-150, 255-200)
,即(155, 105, 55)
。
3. 示例
#include <opencv2/opencv.hpp>
int main() {
// 讀取輸入影像
cv::Mat src = cv::imread("input.jpg", cv::IMREAD_COLOR);
// 檢查影像是否成功載入
if (src.empty()) {
std::cout << "Error: Could not open or find the image!" << std::endl;
return -1;
}
// 建立輸出影像
cv::Mat dst;
// 對影像進行按位取反操作
cv::bitwise_not(src, dst);
// 顯示原影像和處理後的影像
cv::imshow("Original Image", src);
cv::imshow("Bitwise Not Image", dst);
// 等待按鍵
cv::waitKey(0);
return 0;
}
關鍵點總結:
cv::bitwise_not()
對影像的每個畫素進行逐位取反。- 可以選擇透過掩碼
mask
控制操作的範圍,只有掩碼中非零的部分會被按位取反。 - 輸入影像與輸出影像必須大小和型別相同。
這個函式常用於影像處理中的一些特定操作,比如生成負片影像、在掩碼中反轉某些區域等。