導航:首頁 > 編程語言 > pythonopencv旋轉

pythonopencv旋轉

發布時間:2022-03-30 10:17:26

python用OpenCV轉卡通照片報錯,好像是pyrdown的使用有問題

你這個是pyrdown函數使用的時候,操作一次一個 M x N 的圖像就變成了一個 M/2 x N/2 的圖像。像素不是2的整數倍造成pyrup函數使用時像素出現不對等

Ⅱ 如何用opencv python實現圖像的局部放大

在opencv_refman裡面找下這個函數吧,opencv_refman是opencv函數庫裡面自帶的,可以在opencv路徑下搜索下。

Ⅲ python用opencv讀取圖像如何做格式轉換

直接在python中做格式轉換
既然知道frame是numpy array格式,當然可以直接做轉換,但是在python中進行這種操作非常耗時。筆者測試了一下,轉換一張416x416x3的圖像大約需要3秒鍾。這個速度甚至不如用文件轉存的方式。

Ⅳ python matplotlib.pyplot 可以顯示opencv、PIL讀取的圖像,反過來opencv、PIL怎麼讀取plt包繪制的圖像

可以考慮使用plt.savefig()保存圖片,再用opencv來讀取就好了

Ⅳ 怎樣用opencv實現圖像的任意角度的旋轉

上代碼:
//OpenCV 下的圖像任意角度的旋轉

//需要inter公司的OpenCV的支持.

//OpenCV下的圖像任意角度的旋轉
//待旋轉的圖像IplImage* Img_old
//返回的旋轉後圖像 IplImage* Img_tmp.
//旋轉的角度,單位度.
//三種不同的方法.其中方法二沒有完全測試,方法一可以滿足大部分需要
//Vastsky - Nercita 2005 6 12
//vastsky_sun#126.com
IplImage * CCropMeasureView::FitRotate (IplImage* Img_old, double angle,int method)

{

IplImage* Img_tmp = NULL;

double anglerad = (CV_PI* (angle/180)) ;
int newheight =int (fabs(( sin(anglerad)*Img_old->width )) + fabs(( cos(anglerad)*Img_old->height )) );
int newwidth =int (fabs(( sin(anglerad)*Img_old->height)) + fabs(( cos(anglerad)*Img_old->width)) );

Img_tmp = cvCreateImage(cvSize(newwidth,newheight), IPL_DEPTH_8U, 3);
cvFillImage(Img_tmp,0);//目的圖像 使用擴展的大小

IplImage* dst = cvCloneImage( Img_old );//目的圖像 與原圖像等大

float m[6];
CvMat M = cvMat( 2, 3, CV_32F, m );

if(1==method)
{
//方法一 提取象素四邊形,使用子象素精度

int w = Img_old->width;
int h = Img_old->height;

m[0] = (float)(cos(angle*CV_PI/180.));
m[1] = (float)(sin(angle*CV_PI/180.));
m[2] = w*0.5f;
m[3] = -m[1];
m[4] = m[0];
m[5] = h*0.5f;

cvGetQuadrangleSubPix( Img_old, dst, &M, 1, cvScalarAll(0));

cvGetQuadrangleSubPix( Img_old, Img_tmp, &M, CV_INTER_LINEAR, cvScalarAll(0));//+CV_WARP_FILL_OUTLIERS

//方法一 提取象素四邊形,使用子象素精度
}

if(2==method)
{
//方法二 使用 二維旋轉的仿射變換矩陣 存在問題 要求輸入和輸出圖像一樣大 旋轉中心不對

CvPoint2D32f center;
center.x=float (Img_old->width/2.0+0.5);//float (Img_tmp->width/2.0+0.5);
center.y=float (Img_old->height/2.0+0.5);//float (Img_tmp->height/2.0+0.5);
cv2DRotationMatrix( center, angle,1, &M);

cvWarpAffine( Img_old, dst, &M,CV_INTER_LINEAR,cvScalarAll(0) );//小圖
//小目標圖像

//對圖像進行擴展
// 只能一定角度以內 不同象限的不同對待
int dx=int((newwidth -Img_old->width )/2+0.5);
int dy=int((newheight-Img_old->height)/2+0.5);

uchar* old_ptr,*temp_ptr;

for( int y=0 ; y<Img_old->height; y++) //為了不越界
{
for (int x=0 ; x< Img_old->width; x++)
{
old_ptr = &((uchar*)(Img_old->imageData + Img_old->widthStep*y))[(x)*3];
temp_ptr = &((uchar*)(Img_tmp->imageData + Img_tmp->widthStep*(y+dy)))[(x+dx)*3];
temp_ptr[0]=old_ptr[0]; //green
temp_ptr[1]=old_ptr[1]; //blue
temp_ptr[2]=old_ptr[2]; //Red
}
}

center.x=float (Img_tmp->width/2.0+0.5);
center.y=float (Img_tmp->height/2.0+0.5);
cv2DRotationMatrix( center, angle,1, &M);

IplImage* temp = cvCloneImage( Img_tmp );//生成輸出圖像
cvWarpAffine( Img_tmp, temp , &M,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,cvScalarAll(0) );//大圖
Img_tmp=cvCloneImage( temp );

//問題
//cvWarpAffine( Img_tmp, Img_tmp, &M,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,cvScalarAll(0) );//大圖

Ⅵ opencv有旋轉函數嗎!

cvMatchShapes() 比的是不同的輸入圖形的Hu的值的不同。 Hu的意義在於旋轉和尺度變換不大,所以叫做不變矩。 其他的比較方法有多邊形逼近和更復雜的角點

Ⅶ opencv 圖像旋轉後的匹配怎麼做

代碼: //OpenCV 圖像任意角度旋轉 //需要inter公司OpenCV支持. //OpenCV圖像任意角度旋轉 //待旋轉圖像IplImage* Img_old //返旋轉圖像 IplImage* Img_tmp. //旋轉角度,單位度. //三種同.其二沒完全測試,滿足部需要 //Vastsky - Nercita 二005 陸 一二 //vastsky_sun#一二陸中國 IplImage * CCropMeasureView::FitRotate (IplImage* Img_old, double angle,int method) { IplImage* Img_tmp = NULL; double anglerad = (CV_PI* (angle/一吧0)) ; int newheight =int (fabs(( sin(anglerad)*Img_old->width )) + fabs(( cos(anglerad)*Img_old->height )) ); int newwidth =int (fabs(( sin(anglerad)*Img_old->height)) + fabs(( cos(anglerad)*Img_old->width)) ); Img_tmp = cvCreateImage(cvSize(newwidth,newheight), IPL_DEPTH_吧U, 三); cvFillImage(Img_tmp,0);//目圖像 使用擴展 IplImage* dst = cvCloneImage( Img_old );//目圖像 與原圖像等 float m[陸]; CvMat M = cvMat( 二, 三, CV_三二F, m ); if(一==method) { // 提取象素四邊形使用象素精度 int w = Img_old->width; int h = Img_old->height; m[0] = (float)(cos(angle*CV_PI/一吧0.)); m[一] = (float)(sin(angle*CV_PI/一吧0.)); m[二] = w*0.5f; m[三] = -m[一]; m[四] = m[0]; m[5] = h*0.5f; cvGetQuadrangleSubPix( Img_old, dst, &M, 一, cvScalarAll(0)); cvGetQuadrangleSubPix( Img_old, Img_tmp, &M, CV_INTER_LINEAR, cvScalarAll(0));//+CV_WARP_FILL_OUTLIERS // 提取象素四邊形使用象素精度 } if(二==method) { //二 使用 二維旋轉仿射變換矩陣 存問題 要求輸入輸圖像 旋轉 CvPoint二D三二f center; center.x=float (Img_old->width/二.0+0.5);//float (Img_tmp->width/二.0+0.5); center.y=float (Img_old->height/二.0+0.5);//float (Img_tmp->height/二.0+0.5); cv二DRotationMatrix( center, angle,一, &M); cvWarpAffine( Img_old, dst, &M,CV_INTER_LINEAR,cvScalarAll(0) );//圖 //目標圖像 //圖像進行擴展 // 能定角度內 同象限同待 int dx=int((newwidth -Img_old->width )/二+0.5); int dy=int((newheight-Img_old->height)/二+0.5); uchar* old_ptr,*temp_ptr; for( int y=0 ; yheight; y++) //越界 { for (int x=0 ; x Img_old->width; x++) { old_ptr = &((uchar*)(Img_old->imageData + Img_old->widthStep*y))[(x)*三]; temp_ptr = &((uchar*)(Img_tmp->imageData + Img_tmp->widthStep*(y+dy)))[(x+dx)*三]; temp_ptr[0]=old_ptr[0]; //green temp_ptr[一]=old_ptr[一]; //blue temp_ptr[二]=old_ptr[二]; //Red } } center.x=float (Img_tmp->width/二.0+0.5); center.y=float (Img_tmp->height/二.0+0.5); cv二DRotationMatrix( center, angle,一, &M); IplImage* temp = cvCloneImage( Img_tmp );//輸圖像 cvWarpAffine( Img_tmp, temp , &M,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,cvScalarAll(0) );//圖 Img_tmp=cvCloneImage( temp ); //問題 //cvWarpAffine( Img_tmp, Img_tmp, &M,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,cvScalarAll(0) );//

Ⅷ Opencv的refman中,python的用法。

cv2這個中括弧的都是可選參數,就是說從dst往後那些參數都可以不用寫。
其實和cv那個版本的意思一樣,有默認值的。
cv2是version 2了,應該使用新技術,拋棄cv吧。
直接調用cv2.wrapAffine(src, M, dsize)就行了,後面的參數不用寫。

閱讀全文

與pythonopencv旋轉相關的資料

熱點內容
優信二手車解壓後過戶 瀏覽:61
Windows常用c編譯器 瀏覽:778
關於改善國家網路安全的行政命令 瀏覽:833
安卓如何下載網易荒野pc服 瀏覽:654
javainetaddress 瀏覽:104
蘋果4s固件下載完了怎麼解壓 瀏覽:1003
命令zpa 瀏覽:285
python編譯器小程序 瀏覽:944
在app上看視頻怎麼光線調暗 瀏覽:540
可以中文解壓的解壓軟體 瀏覽:593
安卓卸載組件應用怎麼安裝 瀏覽:913
使用面向對象編程的方式 瀏覽:339
程序員項目經理的年終總結範文 瀏覽:929
內衣的加密設計用來幹嘛的 瀏覽:432
淮安數據加密 瀏覽:292
魔高一丈指標源碼 瀏覽:982
松下php研究所 瀏覽:168
c回調java 瀏覽:399
夢幻端游長安地圖互通源碼 瀏覽:745
電腦本地文件如何上傳伺服器 瀏覽:313