在圖像處理中,統計信息可以幫助我們了解圖像的特性,例如區域內的像素分布、顏色轉換以及特定區域的分析。本文將介紹基于LockAI視覺識別模塊如何提取興趣區域(ROI)、轉換顏色通道、計算均值和標準差,以及查找最小值和最大值,并通過一個綜合示例展示其實際應用。
1.基本知識講解
1.1 圖像的興趣區域(ROI)
ROI(Region of Interest):指圖像中感興趣的區域,通常用于局部分析或處理。
提取 ROI 的目的是減少數據量并專注于特定區域,從而提高處理效率。
1.2 顏色空間轉換
不同的顏色空間適用于不同的任務。例如:
灰度圖:簡化圖像處理,常用于邊緣檢測等任務。
HSV:用于顏色分割任務,分離色調、飽和度和亮度。
LAB:更接近人類視覺感知,適合顏色校正。
1.3 圖像統計信息
均值和標準差:反映圖像整體亮度及亮度變化情況。
最小值和最大值:幫助識別圖像中的極端像素值及其位置。
2.API文檔
2.1 頭文件
#include
2.2 提取興趣區域(ROI)
cv::Matroi=image(cv::Rect(x,y,w,h));
功能:
從圖像中提取一個矩形區域。
參數:
image:輸入圖像(cv::Mat類型)。
(x, y):ROI左上角的坐標。
(w, h):ROI的寬高。
返回值:
提取出的ROI圖像(cv::Mat類型)。
2.3 轉換為灰度圖
cv::cvtColor(image,grayImage,cv::COLOR_BGR2GRAY);
功能:
將彩色圖像轉換為灰度圖像。
參數:
image:輸入圖像(cv::Mat類型)。
grayImage:輸出灰度圖像(cv::Mat類型)。
COLOR_BGR2GRAY:將BGR圖像轉換為灰度圖像。
返回值:
無。最后結果儲存在grayImage中。注意:其中根據不同的轉換要求可以使用不同的轉換代碼,具體如下所示。
轉換方向 | 轉換代碼 | 描述 |
---|---|---|
BGR Grayscale | cv::COLOR_BGR2GRAY | 將 BGR 圖像轉換為灰度圖像 |
cv::COLOR_GRAY2BGR | 將灰度圖像轉換為 BGR 圖像 | |
BGR RGB | cv::COLOR_BGR2RGB | 將 BGR 圖像轉換為 RGB 圖像 |
cv::COLOR_RGB2BGR | 將 RGB 圖像轉換為 BGR 圖像 | |
BGR HSV | cv::COLOR_BGR2HSV | 將 BGR 圖像轉換為 HSV 圖像 |
cv::COLOR_HSV2BGR | 將 HSV 圖像轉換為 BGR 圖像 | |
BGR LAB | cv::COLOR_BGR2LAB | 將 BGR 圖像轉換為 LAB 圖像 |
cv::COLOR_Lab2BGR | 將 LAB 圖像轉換為 BGR 圖像 | |
BGR YUV | cv::COLOR_BGR2YUV | 將 BGR 圖像轉換為 YUV 圖像 |
cv::COLOR_YUV2BGR | 將 YUV 圖像轉換為 BGR 圖像 | |
BGR XYZ | cv::COLOR_BGR2XYZ | 將 BGR 圖像轉換為 CIE XYZ 圖像 |
cv::COLOR_XYZ2BGR | 將 CIE XYZ 圖像轉換為 BGR 圖像 | |
BGR YCrCb | cv::COLOR_BGR2YCrCb | 將 BGR 圖像轉換為 YCrCb 圖像 |
cv::COLOR_YCrCb2BGR | 將 YCrCb 圖像轉換為 BGR 圖像 | |
BGR HLS | cv::COLOR_BGR2HLS | 將 BGR 圖像轉換為 HLS 圖像 |
cv::COLOR_HLS2BGR | 將 HLS 圖像轉換為 BGR 圖像 | |
BGR Luv | cv::COLOR_BGR2Luv | 將 BGR 圖像轉換為 Luv 圖像 |
cv::COLOR_Luv2BGR | 將 Luv 圖像轉換為 BGR 圖像 | |
BGR Bayer | cv::COLOR_BayerBG2BGR | 將 Bayer 格式圖像轉換為 BGR 圖像 |
BGR RGBA | cv::COLOR_BGR2RGBA | 將 BGR 圖像轉換為 RGBA 圖像(添加 Alpha 通道) |
cv::COLOR_RGBA2BGR | 將 RGBA 圖像轉換為 BGR 圖像 |
2.4 計算均值和標準差:
cv::meanStdDev(src,mean,stddev);
功能:
計算圖像或矩陣元素的平均值和標準偏差。
參數:
src:輸入圖像或矩陣(cv::Mat類型)。
mean:輸出平均值(cv::Scalar類型)。
stddev:輸出標準偏差(cv::Scalar類型)。
返回值:
無。最后結果儲存在mean和stddev中。
2.5 計算最小值和最大值:
cv::minMaxLoc(src,&minVal,&maxVal,&minLoc,&maxLoc);
功能:
在輸入圖像或矩陣中找到最小值和最大值。
參數:
src:輸入圖像或矩陣(cv::Mat類型)。
minVal:輸出最小值(double類型)。
maxVal:輸出最大值(double類型)。
minLoc:輸出最小值對應的位置(cv::Point類型)。
maxLoc:輸出最大值對應的位置(cv::Point類型)。
返回值:
無。最后結果儲存在minVal、maxVal、minLoc和maxLoc中。
3.綜合代碼解析
3.1 流程圖
3.2 代碼解釋
讀取圖像文件
cv::Matimage=cv::imread("2.jpg");
if(image.empty()) {
std::cerr<<"Error: Could not open image!"<<std::endl;
return-1;
}
設定ROI區域
// 定義 ROI 并提取
cv::RectroiRect(50,50,200,200);
cv::Matroi=image(roiRect);
轉換為灰度圖
cv::MatgrayRoi;
cv::cvtColor(roi,grayRoi,cv::COLOR_BGR2GRAY);
均值和標準差計算
// 計算均值和標準差
cv::Scalarmean,stddev;
cv::meanStdDev(grayRoi,mean,stddev);
3.3 代碼實現
#include
#include
intmain()
{
// 讀取圖像
cv::Matimage=cv::imread("example.jpg");
if(image.empty())
{
std::cerr<<"Error: Could not open image!"<<std::endl;
return-1;
}
// 定義 ROI 并提取
cv::RectroiRect(50,50,200,200);
cv::Matroi=image(roiRect);
// 轉換為灰度圖
cv::MatgrayRoi;
cv::cvtColor(roi,grayRoi,cv::COLOR_BGR2GRAY);
// 計算均值和標準差
cv::Scalarmean,stddev;
cv::meanStdDev(grayRoi,mean,stddev);
// 計算最小值和最大值
doubleminVal,maxVal;
cv::PointminLoc,maxLoc;
cv::minMaxLoc(grayRoi,&minVal,&maxVal,&minLoc,&maxLoc);
// 輸出結果
std::cout<<"Mean: "<<mean[0]<<std::endl;
std::cout<<"Standard Deviation: "<<stddev[0]<<std::endl;
std::cout<<"Min Value: "<<minVal<<" at "<<minLoc<<std::endl;
std::cout<<"Max Value: "<<maxVal<<" at "<<maxLoc<<std::endl;
return0;
}
4.編譯過程
4.1 編譯環境搭建
請確保你已經按照開發環境搭建指南正確配置了開發環境。
同時以正確連接開發板。
4.2 Cmake介紹
# CMake最低版本要求
cmake_minimum_required(VERSION3.10)
project(test-Image-information-statistics)
set(CMAKE_CXX_STANDARD17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 定義項目根目錄路徑
set(PROJECT_ROOT_PATH"${CMAKE_CURRENT_SOURCE_DIR}/../..")
message("PROJECT_ROOT_PATH = "${PROJECT_ROOT_PATH})
include("${PROJECT_ROOT_PATH}/toolchains/arm-rockchip830-linux-uclibcgnueabihf.toolchain.cmake")
# 定義 OpenCV SDK 路徑
set(OpenCV_ROOT_PATH"${PROJECT_ROOT_PATH}/third_party/opencv-mobile-4.10.0-lockzhiner-vision-module")
set(OpenCV_DIR"${OpenCV_ROOT_PATH}/lib/cmake/opencv4")
find_package(OpenCV REQUIRED)
set(OPENCV_LIBRARIES"${OpenCV_LIBS}")
# 定義 LockzhinerVisionModule SDK 路徑
set(LockzhinerVisionModule_ROOT_PATH"${PROJECT_ROOT_PATH}/third_party/lockzhiner_vision_module_sdk")
set(LockzhinerVisionModule_DIR"${LockzhinerVisionModule_ROOT_PATH}/lib/cmake/lockzhiner_vision_module")
find_package(LockzhinerVisionModule REQUIRED)
# 圖像信息處理
add_executable(Test-Image-information-statistics Image_information_statistics.cc)
target_include_directories(Test-Image-information-statistics PRIVATE${LOCKZHINER_VISION_MODULE_INCLUDE_DIRS})
target_link_libraries(Test-Image-information-statistics PRIVATE${OPENCV_LIBRARIES}${LOCKZHINER_VISION_MODULE_LIBRARIES})
install(
TARGETS Test-Image-information-statistics
RUNTIME DESTINATION .
)
4.3 編譯項目
使用 Docker Destop 打開 LockzhinerVisionModule 容器并執行以下命令來編譯項目
# 進入Demo所在目錄
cd/LockzhinerVisionModuleWorkSpace/LockzhinerVisionModule/Cpp_example/B02_Image_information_statistics
# 創建編譯目錄
rm-rfbuild &&mkdirbuild &&cdbuild
# 配置交叉編譯工具鏈
exportTOOLCHAIN_ROOT_PATH="/LockzhinerVisionModuleWorkSpace/arm-rockchip830-linux-uclibcgnueabihf"
# 使用cmake配置項目
cmake ..
# 執行編譯項目
make-j8&&makeinstall
在執行完上述命令后,會在build目錄下生成可執行文件。
5. 例程運行示例
5.1 運行過程
在凌智視覺模塊中輸入以下命令:
chmod777Test-Image-information-statistics
./Test-Image-information-statistics
5.2 運行效果
在運行上述代碼時,會輸出以下結果:
6. 總結
通過上述內容,我們介紹了如何使用 OpenCV 提取圖像的 ROI、轉換顏色空間、計算統計信息等操作。按照以下步驟,您可以輕松地進行圖像的統計分析:
提取 ROI:使用 cv::Rect 提取感興趣區域。
顏色轉換:使用 cv::cvtColor 轉換顏色空間。
計算統計信息:
使用 cv::meanStdDev 計算均值和標準差。
使用 cv::minMaxLoc 查找最小值和最大值及其位置。
綜合應用:結合上述方法對圖像進行局部分析和全局統計。
-
視覺識別
+關注
關注
3文章
94瀏覽量
16946 -
AI視覺
+關注
關注
0文章
77瀏覽量
4681
發布評論請先 登錄
匯編語言模塊調用C++函數實例
基于LockAI視覺識別模塊:C++使用圖像的統計信息
[數字圖像處理與機器視覺:Visual C++與Matlab實現].張錚.
人臉識別C/C++源代碼
關于彩色圖像高斯反向投影基于OpenCV的C++代碼
機器視覺的圖像目標識別方法綜述

評論