3通道图像上的OpenCV CUDA拉普拉斯滤波器

问题描述

我想使用OpenCV的CUDA(当前版本4.3.0)命名空间将拉普拉斯过滤器应用于图像。当前CUDA版本的拉普拉斯过滤器不接受3个通道图像:

https://docs.opencv.org/4.3.0/dc/d66/group__cudafilters.html#gabf85fe61958bb21e93211a6fcc7c5c3b

我对此的想法是拆分通道,分别应用过滤器,然后合并回去。但是,尝试将过滤器应用于各个通道时出现错误

我的第一个问题是由create filter函数中的type()引发的。我将其手动设置为CV_8U来解决该问题,但是在应用过滤器时遇到了另一个问题。我做错了吗?

//Setup  GPU and GPU Mats
cv::cuda::setDevice(0);
cv::cuda::GpuMat src,dst;
std::vector <cv::cuda::GpuMat> channels,lines;
src.upload(ImageCV);

//Start stream
cv::cuda::Stream stream1;

//Split channels
cv::cuda::split(src,channels,stream1);

//Filter image
//FAILING HERE
cv::Ptr<cv::cuda::Filter> lapFilter0 = cv::cuda::createLaplacianFilter(channels[0].type(),lines[0].type(),cv::Size(Sz,Sz));
cv::Ptr<cv::cuda::Filter> lapFilter1 = cv::cuda::createLaplacianFilter(channels[1].type(),lines[1].type(),Sz));
cv::Ptr<cv::cuda::Filter> lapFilter0 = cv::cuda::createLaplacianFilter(channels[2].type(),lines[2].type(),Sz));

//Apply Filter
//FAILING HERE
lapFilter0 ->apply(channels[0],lines[0],stream1);
lapFilter1 ->apply(channels[1],lines[1],stream1);
lapFilter2 ->apply(channels[2],lines[2],stream1);

//Merge channels
cv::cuda::merge(lines,dst,stream1);
dst.download(ImageCV);

解决方法

这是对一个简单错误的简单修复:)

需要分配渠道和线路:

SELECT 
    savetime_temp,AVG_temp,rainc
FROM
(SELECT 
    DATE(savetime) DAY_temp,MIN(savetime) savetime_temp,AVG(weatherdata) AS AVG_temp
FROM
    outside_temp
WHERE
    savetime >= DATE_SUB(CURDATE(),INTERVAL 360 DAY)
GROUP BY  DAte(savetime)) t1 
INNER JOIN
(SELECT 
    DATE(savetime) DAY_rainc,MIN(savetime) savetime_rainc,(MAX(counteramount) - MIN(counteramount)) * 295 / 1000 AS rainc

FROM
    rainfall 
 GROUP BY DAte(savetime)) t2
 ON t1.DAY_temp = t2.DAY_rainc

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...