gpt4 book ai didi

python - opencv::cuda GpuMat CV_8UC1到CV_32FC1转换黑色图像

转载 作者:行者123 更新时间:2023-12-01 14:55:13 24 4
gpt4 key购买 nike

我正在将opencv-python操作转换为c++ opencv::cuda,以获得更好的性能,但是我对CV_8UC1到CV_32FC1的转换存在问题。

我要转换的Python代码:

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_float = np.float32(img_gray)
img_log = cv2.log(img_float)
print(img_log[100,100]) //Prints 5.325 floating value
cv2.imwrite("log_py.jpg", img_log) // shows log transformed image

C++代码:
cv::Mat src_host = cv::imread("crack2.jpg");
cv::Mat dst;
cv::cuda::GpuMat dst, src, log, gray_gpu;
src.upload(src_host);
cv::cuda::cvtColor(src, gray_gpu, cv::COLOR_BGR2GRAY);
gray_gpu.convertTo(gray_gpu, CV_32FC1);
cv::cuda::log(gray_gpu, log);
log.download(dst);
std::cout << "float : " << (float)(dst.at<float>(100,100)) << std::endl; //Prints 0 integer value
std::cout << "int : " << (int)(dst.at<uchar>(100,100)) << std::endl; //prints 128 integer value
cv::imwrite("log_cpp.jpg", dst); //shows black image

如果我不转换为CV_32FC1,它将应用日志转换,但是图像将不一样。我需要将此日志操作应用于 float 值。我该怎么办? ,
(@zindarod)

最佳答案

就地操作似乎不适用于opencv::cuda::GpuMat::convertTo函数。
看到这些帖子:
https://github.com/opencv/opencv/issues/13092
https://answers.opencv.org/question/97672/converting-gpumat-32fc1-8uc1/?answer=97690#post-id-97690

解决方法是,您可以声明一个新的临时变量并对该变量执行操作:

cv::cuda::GpuMat gray_gpu_temp;
cv::cuda::cvtColor(src, gray_gpu_temp, cv::COLOR_BGR2GRAY);
gray_gpu_temp.convertTo(gray_gpu, CV_32FC1);

关于python - opencv::cuda GpuMat CV_8UC1到CV_32FC1转换黑色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46106383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com