问题描述
我想使用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