opencv3.0的cv “ACCESS_MASK”冲突

本文详细介绍了在使用OpenCV时遇到的与MFC冲突导致的编译错误问题,以及如何通过避免使用using namespace cv来解决这一问题。特别关注于在不同开发平台下,如Visual Studio,此冲突的出现与解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具体如下:

C:\Program Files (x86)\Windows Kits\8.0\Include\um\winspool.h(1182): error C2872: “ACCESS_MASK”: 不明确的符号
          可能是“C:\Program Files (x86)\Windows Kits\8.0\Include\um\winnt.h(8533) : DWORD ACCESS_MASK”
          或       “D:\opencv\v11_x86_cuda_ipp_tbb_openmp\include\opencv2/core/mat.hpp(63) : ACCESS_MASK”
在winnt.h里面有一个cv的命名空间,同样定义了一个ACCESS_MASK,跟opencv的cv::ACCESS_MASK发生了冲突!!!

该冲突在MFC中没有出现,在控制台程序中才会报错, -_-!这是因为预编译头stdafx.h,加入了Windows SDK的引用,从而引用了winnt.h

对于opencv 2.x版本,不存在该问题。但如果是opencv3.0,请不要在代码中使用using namespace cv;  乖乖地在每一个opencv函数前加上cv::吧。当然,这仅限于开发平台为VS的情况




python3 glasswindow.py [ WARN:0@1.737] global loadsave.cpp:275 findDecoder imread_(&#39;window_scene.jpg&#39;): can&#39;t open/read file: check file path/integrity [ WARN:0@1.737] global loadsave.cpp:275 findDecoder imread_(&#39;depth_map.png&#39;): can&#39;t open/read file: check file path/integrity Traceback (most recent call last): File "/home/realsense-d455-test/glasswindow.py", line 84, in <module> glass_mask, frame_lines, result_img = detect_glass_and_frame(rgb_img, depth_map) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/realsense-d455-test/glasswindow.py", line 41, in detect_glass_and_frame gray = cv2.cvtColor(rgb_img, cv2.COLOR_BGR2GRAY) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cv2.error: OpenCV(4.12.0) /home/conda/feedstock_root/build_artifacts/libopencv_1753287227905/work/modules/imgproc/src/color.cpp:199: error: (-215:Assertion failed) !_src.empty() in function &#39;cvtColor&#39; 请根据上面报错提示修改下面的代码,并提供一份完整的代码 import cv2 import numpy as np import matplotlib.pyplot as plt def detect_glass_and_frame(rgb_img, depth_map): """ 检测玻璃及窗框的核心函数 参数: rgb_img: RGB彩色图像 (H, W, 3) depth_map: 深度图 (H, W),无效值通常为0 返回: glass_mask: 玻璃区域掩膜 frame_lines: 检测到的窗框线段 result_img: 可视化结果图像 建议: 在强光照环境下,为深度相机添加红外滤光片 对窗框线段进行聚类和延长处理,形成完整框架 使用RANSAC算法拟合更精确的直线方程 """ # ===== 1. 深度图预处理 ===== # 创建玻璃候选区域掩膜(深度值为0的区域) glass_mask = np.where(depth_map == 0, 255, 0).astype(np.uint8) # 形态学操作优化掩膜 kernel = np.ones((5, 5), np.uint8) glass_mask = cv2.morphologyEx(glass_mask, cv2.MORPH_CLOSE, kernel) # 闭运算填充空洞 glass_mask = cv2.dilate(glass_mask, kernel, iterations=2) # 扩大边缘区域 # 中值滤波降噪 glass_mask = cv2.medianBlur(glass_mask, 5) # ===== 2. 玻璃区域分割 ===== # 查找轮廓并过滤小区域 contours, _ = cv2.findContours(glass_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) min_area = 1000 # 最小面积阈值 glass_roi = np.zeros_like(glass_mask) for cnt in contours: area = cv2.contourArea(cnt) if area > min_area: cv2.drawContours(glass_roi, [cnt], -1, 255, -1) # ===== 3. 窗框检测 ===== # RGB图像预处理 gray = cv2.cvtColor(rgb_img, cv2.COLOR_BGR2GRAY) clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8)) enhanced = clahe.apply(gray) # 边缘检测(在玻璃区域边界) edges = cv2.Canny(enhanced, 50, 150) # 霍夫变换检测直线 lines = cv2.HoughLinesP(edges, rho=1, theta=np.pi/180, threshold=50, minLineLength=100, maxLineGap=10) # 几何约束筛选窗框线 frame_lines = [] if lines is not None: for line in lines: x1, y1, x2, y2 = line[0] # 筛选水平/垂直线(角度容差±10度) if abs(x1 - x2) < 10 or abs(y1 - y2) < 10: frame_lines.append(line[0]) # ===== 4. 结果可视化 ===== result_img = rgb_img.copy() # 绘制玻璃区域(半透明红色) glass_color = np.zeros_like(rgb_img) glass_color[glass_roi == 255] = [0, 0, 255] # 红色 cv2.addWeighted(glass_color, 0.3, result_img, 1, 0, result_img) # 绘制窗框线 for line in frame_lines: x1, y1, x2, y2 = line cv2.line(result_img, (x1, y1), (x2, y2), (0, 255, 0), 2) return glass_roi, frame_lines, result_img # ===== 主程序 ===== if __name__ == "__main__": # 模拟数据加载(实际使用时应替换为真实相机数据) # 注意:实际应用中需使用pyrealsense2等库获取深度相机数据 rgb_img = cv2.imread(&#39;window_scene.jpg&#39;) # 替换为实际RGB图像路径 depth_map = cv2.imread(&#39;depth_map.png&#39;, cv2.IMREAD_ANYDEPTH) # 替换为实际深度图路径 # 执行检测 glass_mask, frame_lines, result_img = detect_glass_and_frame(rgb_img, depth_map) # 显示结果 plt.figure(figsize=(15, 10)) plt.subplot(221) plt.title("RGB Image") plt.imshow(cv2.cvtColor(rgb_img, cv2.COLOR_BGR2RGB)) plt.subplot(222) plt.title("Depth Map") plt.imshow(depth_map, cmap=&#39;jet&#39;) plt.colorbar() plt.subplot(223) plt.title("Glass Detection") plt.imshow(glass_mask, cmap=&#39;gray&#39;) plt.subplot(224) plt.title("Detection Result") plt.imshow(cv2.cvtColor(result_img, cv2.COLOR_BGR2RGB)) plt.tight_layout() plt.show()
最新发布
07-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值