[英]How to get Hough transform matrix ,theta and rho value of hough transformation in opencv cpp
[英]how to transform an image with a transformation Matrix in OpenCv?
我想根據具有角度( arcTan(a)
)的直線(y = ax + b)的大小來變換整個圖像,該角度應僅應用於所有點的y軸。
我想使用warpAffine(...)
方法,但是我能夠使用此方法的方法是在圖像中使用點(通常為3個),以便warpAffine(...)
可以找出自身的角度並變換圖像的該部分,這不是我所需要的。需要,因為我想變換整個圖像而不僅僅是一塊。
如果有辦法用warpAffine(...)
或任何其他方法來做到這一點,請告訴我
cv::Mat t(3,3,CV_64F);
t=0;
t.at<double>(0,0) = 1;
t.at<double>(1,1) = 1;
t.at<double>(0,1) = -tan(0.17);
t.at<double>(2,2) = 1;
cv::Mat dest;
cv::Size size(imgb1.cols,imgb1.rows);
warpAffine(imgb1, dest, t, size, INTER_LINEAR, BORDER_CONSTANT);
imshow("outputImage.jpg", dest);
到現在為止,這是我可以實現的,我的轉換矩陣是這樣的:
1 -tan(angle) 0
0 1 0
0 0 1
warpAffine
采用2x3矩陣; 只需忽略轉換的最底行即可。 (我還更改了矩陣初始化。)這對我有用:
cv::Mat t(2,3,CV_64F, cvScalar(0.0));
t.at<double>(0,0) = 1;
t.at<double>(1,1) = 1;
t.at<double>(0,1) = -tan(0.17);
// t.at<double>(2,2) = 1;
cv::Mat dest;
cv::Size size(smiley_image.cols,smiley_image.rows);
warpAffine(smiley_image, dest, t, size, INTER_LINEAR, BORDER_CONSTANT);
imshow("outputImage", dest);
這是我得到的:
要在Y方向上應用剪切,您需要將變換矩陣更改為:
1 0 0
-tan(angle) 1 0
0 0 1
(實際上,剪切變換通常是cot(angle)
,它是tan(angle)
的倒數,但如果它可以為您提供所需的結果,則可以使用它。)
這是使用新轉換矩陣的輸出圖像:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.