
QT+OpenCV开发的图像处理通用开发平台:实现常规图像处理、自定义程序及独立显
示图元窗口程序流程
深夜两点半的显示器还亮着,手指在机械键盘上敲出最后一行qt代码。看着自己捣鼓了半个月的图
形处理框架终于能跑通全流程,摸过手边的冰可乐猛灌一口——这玩意儿可比对象靠谱。
搞图像处理最烦的就是每次都要重复造轮子。这次直接用QT搭了个带插件系统的平台,主窗口左侧
直接扔了个QMdiArea搞多文档界面。核心就三块:图像显示窗口、算法流程编辑器和图元属性面板,各自用
QDockWidget挂着随时拖拽。
图像加载这活OpenCV熟门熟路,但转成QT图片得注意颜色通道:
```cpp
cv::Mat src = cv::imread("test.jpg");
cv::cvtColor(src, src, cv::COLOR_BGR2RGB); // 通道转换
QImage img(src.data, src.cols, src.rows, QImage::Format_RGB888);
displayLabel->setPixmap(QPixmap::fromImage(img));
```
这里藏着个坑,OpenCV的BGR格式直接转QT会出鬼影,必须手动转RGB。显示控件用的QLabel,但想支
持缩放得继承重写:
```cpp
void ImageWidget::wheelEvent(QWheelEvent* event) {
double delta = event->angleDelta().y() > 0 ? 1.1 : 0.9;
scaleFactor *= delta;
scaleFactor = qBound(0.1, scaleFactor, 10.0); // 限制缩放范围
updateDisplay();
}
```
鼠标拖拽平移反而简单,记录上次坐标差就行。最爽的是实现了节点式编程界面,仿造Blender的节
点编辑器,每个处理步骤变成可连接的图元:
```cpp
class ProcessNode : public QGraphicsItem {
// 节点主体、输入输出端口、连接线管理...
};