马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 中使用的是行优先存储方式。
你可以尝试按照上述方法修改代码,并再次运行程序。
|