利用OpenCV生成關於某點的顏色徑向均勻漸變影象
【原文:http://blog.csdn.net/quarryman/article/details/6418188】
- #include "cv.h"
- #include "highgui.h"
- #include <math.h>
- #pragma comment(lib,"highgui.lib")
- #pragma comment(lib,"cxcore.lib")
- #pragma comment(lib,"cv.lib")
- int main( int argc, char** argv )
- {
- IplImage* image = cvCreateImage(cvSize(800,600),IPL_DEPTH_8U,3);
- if(!image)
- {
- return -1;
- }
- CvScalar a=CV_RGB(0,255,0);
- CvScalar b=CV_RGB(0,0,0);
- cvSet(image,a);
- CvPoint origin=cvPoint(800,600);
- CvPoint center=cvPoint(image->width/2,image->height/2);
- double distance;
- if(origin.x<=center.x && origin.y<=center.y)
- {
- distance=sqrt((image->width-1-origin.x)*(image->width-1-origin.x)+
- (image->height-1-origin.y)*(image->height-1-origin.y));
- }
- else if(origin.x<=center.x && origin.y>center.y)
- {
- distance=sqrt((image->width-1-origin.x)*(image->width-1-origin.x)+
- origin.y*origin.y);
- }
- else if(origin.x>center.x && origin.y<=center.y)
- {
- distance=sqrt(origin.x*origin.x+
- (image->height-1-origin.y)*(image->height-1-origin.y));
- }
- else if(origin.x>center.x && origin.y>center.y)
- {
- distance=sqrt(origin.x*origin.x+origin.y*origin.y);
- }
- double weightB=(b.val[0]-a.val[0])/distance;
- double weightG=(b.val[1]-a.val[1])/distance;
- double weightR=(b.val[2]-a.val[2])/distance;
- for(int i=0;i<image->width;i++)
- {
- for(int j=0;j<image->height;j++)
- {
- double dist=sqrt((i-origin.x)*(i-origin.x)+(j-origin.y)*(j-origin.y));
- uchar* ptr = &CV_IMAGE_ELEM(image,uchar,j,i*3);
- ptr[0] = cvRound(ptr[0]+weightB*dist);
- ptr[1] = cvRound(ptr[1]+weightG*dist);
- ptr[2] = cvRound(ptr[2]+weightR*dist);
- }
- }
- cvSaveImage( "radial.jpg", image );
- cvNamedWindow( "test", 1 );
- cvShowImage( "test", image );
- cvWaitKey();
- cvDestroyWindow("test");
- cvReleaseImage(&image);
- return 0;
- }
下圖是上面的程式碼生成的效果圖。通過改寫上面程式碼中的相關引數,主要是變數a,b和origin,可以生成更炫的漸變圖。
當修改為a=CV_RGB(0,255,0); b=CV_RGB(255,0,0);產生如下的影象
當修改為a=CV_RGB(255,255,0);b=CV_RGB(0,0,255);origin=cvPoint(200,100);生成的影象如下
相關文章
- 利用CAGradientLayer自定義顏色漸變viewView
- 對文字顏色從左到右(橫向)漸變的一點理解(坑)
- CSS 顏色漸變的程式碼.CSS
- iOS CAGradientLayer顏色漸變iOS
- css3背景顏色漸變CSSS3
- iOS 背景圖層的顏色漸變效果iOS
- CSS3線性漸變和徑向漸變CSSS3
- Android 顏色漸變 屬性動畫Android動畫
- CSS--border邊框顏色漸變CSS
- javascript網頁背景顏色漸變效果JavaScript網頁
- css樣式背景顏色漸變效果CSS
- canvas createRadialGradient() 徑向漸變Canvas
- SVG <radialGradient> 徑向漸變SVG
- 使用canvas來完成線性漸變和徑向漸變的功能Canvas
- css文字顏色漸變的3種實現CSS
- OpenCV基於顏色資訊的車牌提取OpenCV
- css3實現的文字顏色漸變和漸隱效果CSSS3
- R語言colorRampPalette函式-建立顏色梯度(漸變色)R語言函式梯度
- 利用opencv合併影象OpenCV
- 簡易的iOS導航欄顏色漸變方案iOS
- css徑向漸變程式碼例項CSS
- canvas徑向漸變程式碼例項Canvas
- 自定義View之顏色漸變折線圖View
- CSS3文字顏色漸變效果CSSS3
- iOS 導航欄顏色透明度漸變iOS
- 直播小程式原始碼,Swift 獲取漸變色顏色值原始碼Swift
- app直播原始碼,xml實現由上而下的顏色漸變APP原始碼XML
- iOS兩種顏色的線性漸變 --DDGBannerScrollViewiOSView
- jquery的顏色漸變外掛: Color animation jQuery-pluginjQueryPlugin
- js計算線性漸變的中間顏色值JS
- CSS radial-gradient()徑向漸變CSS
- 在LCD螢幕上漸變顯示sRGB所有範圍顏色, 最大可漸變16,581,375種顏色
- 基於OpenCV的車牌識別(Sobel、顏色定位)OpenCV
- 珂朵莉樹/顏色段均攤
- css3實現的徑向漸變和線性漸變程式碼例項CSSS3
- [譯] Android 實現顏色漸變的一個小 tipAndroid
- Android 沉浸式狀態列 漸變顏色的實現Android
- canvas簡單徑向漸變程式碼例項Canvas