Mat imgthreshold; Mat imgsrc = cv::imread("C:/Users/Dell/Pictures/Camera Roll/6.png",0); imshow("imgsrc", imgsrc); threshold(imgsrc, imgthreshold,50, 110, THRESH_BINARY); imshow("imgthreshold", imgthreshold); vector<vector<Point>> contours; findContours(imgthreshold, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE); cv::Mat imgdraw = imgsrc.clone(); drawContours(imgdraw, contours, -1, (0, 0, 255),0); imshow("imgdraw", imgdraw); waitKey(0);为什么这块输出的是白色边框而不是红色
时间: 2024-03-15 19:45:55 浏览: 169
在绘制边框时,你应该传入一个 Scalar 类型的参数作为边框颜色,而不是一个元组或者一个数组。修改 drawContours 函数的第四个参数,将其改为 Scalar(0, 0, 255) 即可绘制红色边框,代码如下:
```c++
Mat imgthreshold;
Mat imgsrc = cv::imread("C:/Users/Dell/Pictures/Camera Roll/6.png",0);
imshow("imgsrc", imgsrc);
threshold(imgsrc, imgthreshold,50, 110, THRESH_BINARY);
imshow("imgthreshold", imgthreshold);
vector<vector<Point>> contours;
findContours(imgthreshold, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
cv::Mat imgdraw = imgsrc.clone();
drawContours(imgdraw, contours, -1, Scalar(0, 0, 255), 1); // 修改这里
imshow("imgdraw", imgdraw);
waitKey(0);
```
相关问题
cv::findDecoder imread_('C://Users//Lenovo//Desktop//sanwei//sanwei//data//left//0.png'): can't open/read file: check file path/integrity
根据引用和引用的内容,问题中提到的错误信息是由于文件路径错误或文件损坏导致的。cv::findDecoder imread_无法打开或读取文件时会报错。可能的原因有两种情况:1)文件路径错误,可能是文件名或文件夹路径中有中文字符导致的。OpenCV库使用C字符串表示文件路径,不支持中文字符。2)文件损坏或格式不受支持。
为了解决这个问题,可以尝试以下方法:
1)检查文件路径是否正确,确保文件路径中不包含中文字符,并且文件存在于指定路径中。
2)检查文件是否损坏或格式是否受支持。可以尝试打开其他图片文件,检查是否能够正常读取。
如果文件路径中包含中文字符,可以尝试将文件路径转换为英文字符或使用其他编码方式表示路径。例如,可以通过修改代码来使用C++标准字符串来表示文件路径,或使用特定的编码方式来解决中文路径的问题。
另外,还可以尝试使用小工具SmallCV来读取图片文件,该工具支持轻量级的Mat和imread()函数。通过将图片文件路径传递给cv_imread()函数,可以尝试读取图片并返回Mat对象。
请注意,以上方法只是一些常见的解决方案,实际解决问题可能需要根据具体情况进行调试和实验。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [关于出现global loadsave.cpp:244 cv::findDecoder imread_...can‘t open/read file: check file path/...](https://blog.csdn.net/sjjg129/article/details/130092417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [Python:loadsave.cpp (239) cv::findDecoder imread_(‘‘)can‘t open/read file: check file path/...](https://blog.csdn.net/qjyws/article/details/129939694)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [轻量级Mat和imread()/ imwrite()/ imshow()-C/C++开发](https://download.csdn.net/download/weixin_42165980/19108181)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
import cv2 import numpy as np def denoise(images, ksize): avg_img = np.zeros_like(images[0], dtype = np.float32) for img in images: blur_img = c2.GaussianBlur(img.ksize. 0) avg_img += blur_img avg_img /= len(images) avg_img = np.round(avg_img).astype(np.uint8) return avg_img img1 = cv2.imread('C:/Users/Administrator/PycharmProjects/untitled1/text.png') img2 = cv2.imread('C:/Users/Administrator/PycharmProjects/untitled1/R-C.png') img3 = cv2.imread('C:/Users/Administrator/PycharmProjects/untitled1/R-C(1).png') images = [img1, img2, img3] ksize = (5, 5) denoised_img = denoise(images, ksize) cv2.imshow('Denoised Image', denoised_img) cv2.waitKey(0) cv2.destroyAllWindows() 上述代码运行之后报错显示:name 'avg_img' is not defined,该如何处理
在您提供的代码中,函数 `denoise()` 中的 `avg_img` 变量定义在循环中,因此它的作用域仅限于循环内部。当函数返回时,变量已经不存在了,因此在函数外部无法访问变量。为了解决这个问题,您需要将 `avg_img` 的定义移动到循环外部,以便它的作用域扩展到整个函数。以下是修改后的代码:
```
import cv2
import numpy as np
def denoise(images, ksize):
avg_img = np.zeros_like(images[0], dtype=np.float32)
for img in images:
blur_img = cv2.GaussianBlur(img, ksize, 0)
avg_img += blur_img
avg_img /= len(images)
avg_img = np.round(avg_img).astype(np.uint8)
return avg_img
img1 = cv2.imread('C:/Users/Administrator/PycharmProjects/untitled1/text.png')
img2 = cv2.imread('C:/Users/Administrator/PycharmProjects/untitled1/R-C.png')
img3 = cv2.imread('C:/Users/Administrator/PycharmProjects/untitled1/R-C(1).png')
images = [img1, img2, img3]
ksize = (5, 5)
denoised_img = denoise(images, ksize)
cv2.imshow('Denoised Image', denoised_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在修改后的代码中,`avg_img` 变量在函数外部定义,并在循环中累加高斯模糊后的图像。最后,它被除以图像数,舍入并转换为 `uint8` 类型。函数返回 `avg_img` 变量的值,并在主程序中显示去噪后的图像。
阅读全文