|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 白牡丹秀色可餐 于 2023-3-31 19:59 编辑
我照着视频打了一个掩膜图像处理,是将图像的每个像素进行掩膜处理使之更加清晰,详情请看这个链接https://blog.csdn.net/weixin_44651073/article/details/126207765
但是一直运行不出来,请问这个是为什么?
这是代码
- #include<opencv2/opencv.hpp>
- #include<iostream>
- #include<math.h>
- #include <opencv2/highgui/highgui_c.h>
- using namespace cv;
- int main() {
- Mat src, dst;
- src = imread("D:/C++/OpenCV/test.jpg");
- if (!src.data) {
- printf("could not load image...\n");
- return -1;
- }
- namedWindow("input image", CV_WINDOW_AUTOSIZE);
- imshow("input image", src);
-
- dst = Mat::zeros(src.size(), src.type());
- int cols = (src.cols-1) * src.channels();//得到图像宽度=图像宽度*图像通道数(RGB有三个通道每个cols有三个值,所以相乘得到总数)
- int offsetx = src.channels();
- int rows = src.rows;//得到图像长度
- for (int row = 1; row < (rows - 1); row++) {
- //获取每一个通道的指针
- const uchar* current = src.ptr<uchar>(row);
- const uchar* previous = src.ptr<uchar>(row - 1);
- const uchar* next = src.ptr<uchar>(row + 1);
- uchar* count = dst.ptr<uchar>(row);
- for (int col = offsetx; col < cols; col++) {
- count[col] = saturate_cast<uchar>(5 * current[col] - (current[col+offsetx]+current[col-offsetx]+previous[col]+next[col]));
- }
- }
- namedWindow("output image", CV_WINDOW_AUTOSIZE);
- imshow("output image", dst);
- waitKey(0);
- return 0;
- }
复制代码
运行后是这样的
删除后面的掩膜操作是能够显示图片的
检查过代码和视频里教的没有区别但是就是卡住了,请问这是为什么?
根据你提供的代码,很可能是以下问题导致程序无法正常运行:
1、代码中第14行,使用了错误的OpenCV窗口标志CV_WINDOW_AUTOSIZE,应该改为WINDOW_AUTOSIZE。
2、代码中第23行的循环条件应该是 row < (rows - 1),而不是 rows < (rows - 1)。
3、代码中第30行,获取 previous 和 next 指针时,应该将 row - 1 和 row + 1 作为参数传递,而不是 row + 1 和 row - 1。这是因为 OpenCV 中使用的是行优先存储方式。
你可以尝试按照上述方法修改代码,并再次运行程序。
|
|