OpenCV(cv::bitwise_not())

做梦当财神發表於2024-09-21

目錄
  • 1. 函式定義
  • 2. 工作原理
  • 3. 示例



cv::bitwise_not() 是 OpenCV 中用於對影像或矩陣進行按位取反操作的函式。它將輸入影像的每個畫素的值進行按位反轉,生成輸出影像。按位取反是對每個位進行反轉,即將二進位制數中的 0 變為 1,1 變為 0。



1. 函式定義

void cv::bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray());

引數:

  1. src:輸入影像或矩陣,型別可以是 8 位、16 位或 32 位整型、浮點型(單通道或多通道)。輸入影像必須是單通道或多通道的矩陣。每個畫素的每個位都會被反轉。

  2. dst:輸出影像或矩陣,大小和型別與輸入影像 src 相同。即 dst 是按位反轉後的結果影像。

  3. 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 控制操作的範圍,只有掩碼中非零的部分會被按位取反。
  • 輸入影像與輸出影像必須大小和型別相同。

這個函式常用於影像處理中的一些特定操作,比如生成負片影像、在掩碼中反轉某些區域等。



相關文章