【发布时间】:2018-02-16 18:49:21
【问题描述】:
我正在将 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,它会应用对数转换,但图像不会相同。我需要将此日志操作应用于浮点值。我该怎么办? , (@zindarod)
【问题讨论】:
-
试试
dst.at<float>(100,100) -
对不起,我写错了,感谢编辑,它用“(float)(dst.at
(100,100))”打印了0个整数
标签: python c++ opencv image-processing