The 14th-seeded Kvitova earned her first grass-court title in four years — and 29th trophy of her singles career overall — after breaking Ostapenko, the defending champion, early in both sets and feasting on the Latvian's second serve.
Kvitova saved five break points in the fourth game of the second set to stay in control of the match at 3-1.
"Playing on the grass is very special for me every time," the 32-year-old Czech player said in her on-court interview.
"It's the best preparation for Wimbledon, as well."
Kvitova, the Wimbledon champion in 2011 and 2014, plays Tuesday at the All England Club in a first-round match against Jasmine Paolini of Italy.
She is now 5-1 in grass-court finals in her career. Her most recent title on grass had been Birmingham in 2018.
The eighth-seeded Ostapenko, a Wimbledon semifinalist four years ago, won the 2017 French Open.
Third-seeded Taylor Fritz will face Maxime Cressy in the men's final.