本文實作 OpenCV 經典教材《學習 OpenCV》第四章第三題:載入影像、計算 RGB 三通道與灰階直方圖、繪製直方圖圖像、支援滑鼠框選矩形區域 (ROI) 並即時顯示該區域直方圖。
IplImage* getHistImage(IplImage* src, CvHistogram* hist, CvSize size, CvScalar color) {
IplImage* dst = cvCreateImage(size, IPL_DEPTH_8U, 3);
cvSet(dst, cvScalarAll(255));
float max_val; cvGetMinMaxHistValue(hist, NULL, &max_val);
int bin_w = size.width / 256;
for (int i = 0; i < 256; i++) {
float val = cvGetReal1D(hist->bins, i);
CvPoint p0 = cvPoint(i * bin_w, size.height);
CvPoint p1 = cvPoint((i+1) * bin_w, size.height - cvRound(val * size.height / max_val));
cvRectangle(dst, p0, p1, color, -1);
}
return dst;
}
void my_mouse_callback(int event, int x, int y, int flags, void* param) {
// 記錄 rect = cvRect(x, y, 0, 0) 起始點
// EVENT_MOUSEMOVE 更新寬高
// EVENT_LBUTTONUP 完成選取,重新計算 ROI 直方圖並顯示
}

此練習涵蓋影像載入、通道操作、直方圖統計、GUI 互動等核心技能,是入門 OpenCV 影像分析的絕佳實戰。