在Xcode opencv c++dcmtk读取dicom图像鼠标拖动任意画多个圆并显示
时间: 2023-06-13 10:07:57 浏览: 99
读取并可视化DICOM图像(VTK & OpenCV)_ c opencv 调用vtkcsdn, cv2读dicom图片
下面是一个简单的示例代码,可以在 Xcode 上使用 OpenCV 和 DCMTK 库读取 DICOM 图像文件,并允许用户使用鼠标拖动来画圆并将其显示在图像上:
```cpp
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
#include <dcmtk/dcmdata/dctk.h>
using namespace std;
using namespace cv;
// 回调函数,用于鼠标事件处理
void on_mouse(int event, int x, int y, int flags, void* param);
int main(int argc, char** argv)
{
// 读取 DICOM 文件
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile(argv[1]);
if (status.bad())
{
cerr << "Error: cannot read DICOM file" << endl;
return -1;
}
// 提取图像像素数据和相关信息
DcmDataset* dataset = fileformat.getDataset();
Uint16 rows, cols;
dataset->findAndGetUint16(DCM_Rows, rows);
dataset->findAndGetUint16(DCM_Columns, cols);
Uint16* pixel_data;
dataset->findAndGetUint16Array(DCM_PixelData, pixel_data);
// 将像素数据转换为 OpenCV Mat 对象
Mat image(rows, cols, CV_16UC1, pixel_data);
// 创建窗口并显示图像
namedWindow("DICOM Image", WINDOW_NORMAL);
imshow("DICOM Image", image);
// 设置鼠标事件回调函数
setMouseCallback("DICOM Image", on_mouse, &image);
// 等待用户按下任意键
waitKey(0);
return 0;
}
void on_mouse(int event, int x, int y, int flags, void* param)
{
// 如果用户按下左键并拖动鼠标,则画圆并显示在图像上
if (event == EVENT_LBUTTONDOWN && (flags & EVENT_FLAG_LBUTTON))
{
Mat& image = *(Mat*)param;
circle(image, Point(x, y), 20, Scalar(65535), 2);
imshow("DICOM Image", image);
}
}
```
该代码打开一个 DICOM 文件,显示其图像,并允许用户使用鼠标拖动来画圆并将其显示在图像上。请注意,该代码仅绘制了单个圆形,如果需要绘制多个圆形,则需要将其存储在一个容器中,并在 `on_mouse` 函数中迭代它们并画出它们。
阅读全文