#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { Mat img = imread("D:/360MoveData/Users/15312/Desktop/zy3/1/jpg"); // 读取图像 Mat img_gray = imread("D:/360MoveData/Users/15312/Desktop/zy3/1/jpg",IMREAD_GRAYSCALE); // 读取图像 Mat img_emboss; // 定义浮雕核 float kernel_data[3][3] = { {-1, -1, 0}, {-1, 0, 1}, { 0, 1, 1} }; Mat kernel = Mat(3, 3, CV_32F, kernel_data); img_gray.convertTo(img_gray,CV_32F); // 对灰度图像进行浮雕处理 filter2D(img_gray, img_emboss, -1, kernel, Point(-1, -1), 128, BORDER_REPLICATE); // 显示原图像和浮雕图像 namedWindow("Input Image", WINDOW_NORMAL); namedWindow("Embossed Image", WINDOW_NORMAL); imshow("Input Image", img); imshow("Embossed Image", img_emboss); waitKey(0); // 等待按键 return 0; }存在问题
时间: 2023-06-19 18:07:47 浏览: 167
opencv3/C++ 离散余弦变换DCT方式
你的代码存在两个问题:
1. 读取图像时,应该提供完整的路径和文件名,而不仅仅是文件夹路径。
比如:`Mat img = imread("D:/360MoveData/Users/15312/Desktop/zy3/1/jpg/1.jpg");`
2. 在进行浮雕处理前,需要将图像的像素值类型转换为浮点型,即`CV_F`类型。因此需要将`img_gray`进行类型转换:
`img_gray.convertTo(img_gray,CV_32F);`
修改后的代码如下:
```
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
Mat img = imread("D:/360MoveData/Users/15312/Desktop/zy3/1/jpg/1.jpg"); // 读取图像
Mat img_gray = imread("D:/360MoveData/Users/15312/Desktop/zy3/1/jpg/1.jpg",IMREAD_GRAYSCALE); // 读取图像
Mat img_emboss;
// 定义浮雕核
float kernel_data[3][3] = {
{-1, -1, 0},
{-1, 0, 1},
{ 0, 1, 1}
};
Mat kernel = Mat(3, 3, CV_32F, kernel_data);
img_gray.convertTo(img_gray,CV_32F); // 将灰度图像像素值类型转换为浮点型
// 对灰度图像进行浮雕处理
filter2D(img_gray, img_emboss, -1, kernel, Point(-1, -1), 128, BORDER_REPLICATE);
// 显示原图像和浮雕图像
namedWindow("Input Image", WINDOW_NORMAL);
namedWindow("Embossed Image", WINDOW_NORMAL);
imshow("Input Image", img);
imshow("Embossed Image", img_emboss);
waitKey(0); // 等待按键
return 0;
}
```
阅读全文